kable In this notebook we analyze the second “think/believe” task, in which participants completed a series of fill-in-the-blanks with free responses.
Note: There are some subjective calls here, and translation issues. For now, I’ve used a combination of automatic “lemmatization” and hand-coding to do my best to code whether responses should count as “believe” (e.g., including obvious cases like “believes” and “believed”; including Bislama “belif” and “bilif” and other spellings).
As of 2020-01-22, I have two versions of these variables – one that only includes responses that are strictly “believe” and one that also includes cases that involve the word “believe” (e.g., “firmly believes,” “does not believe”) – and likewise for think. The looser interpretations are called believeX (or “belief*”) and thinkX (or “think*”).
Overview
From the preregistration (link):
“Our overarching hypothesis for the present study is that […] other languages will have an epistemic verb that is more likely to be used for religious attitude reports (similar to English “believe”) and a different epistemic verb that is more likely to be used for matter-of-fact attitude reports (similar to English “think”).
For this study, we are examining five languages in five regions of interest: (i) Mandarin in China; (ii) Thai in Thailand; (iii) Bislama (an English-based creole language) on the Melanesian Island of Vanuatu; (iv) Fante in Ghana; and (v) American English in the Bay Area, California.
We thus have five more specific sub-hypotheses. For each of the first four languages / regions of interest, we hypothesize that a set of words or phrases exists whose usage parallels the difference between usage of “think” and “believe” in American English, with one word or phrase (the “think” analogue) being used for more matter-of-fact attitude reports and the other (the “believe” analogue) being more likely to be used for religious attitude reports. That gives us our first four sub-hypotheses: that Mandarin, Thai, Bislama and Fante speakers will each use two different words in a manner parallel to the use of “think” and “believe” in an American English setting as identified by Heiphetz, Landers, and Van Leeuwen. Our fifth sub-hypothesis is that the Bay Area portion of the study will replicate the results of the earlier study of Heiphetz, Landers, and Van Leeuwen."
KW EXECUTIVE SUMMARY (2020-01-20): We replicated the original finding in the US (and the findings of Think Believe 1): participants were more likely to write in “believe” for religious than fact questions. We found the same pattern in all five countries/langauges included in this study.
As in Think Believe 1, the pattern was somewhat weaker in Ghana/Fante than in other countries/languages. In Think Believe 1, the pattern was stronger in Thailand/Thai (and no stronger or weaker in China/Mandarin or Vanuatu/Bislama); in contrast, in this study it was stronger in China/Mandarin, weaker in Vanuatu/Bislama, and no stronger or weaker Thailand/Thai. I suspect these patterns are largely accounted for by the fact that so few participants in Ghana and especially Vanuatu spontaneously used the word “believe” in their free responses.
Analysis: KW without looking at preregistration
These analyses directly parallel the way I analyzed the Think Believe 1 data before looking at the preregistration. Again, I think these analyses are valuable because they’re a little more efficient than the preregistered analyses – no need for follow-up tests – and they directly test the question of whether the effect of interest varies across countries/langauges.
As of 2020-01-22, I’m now using the more lenient “believe*” variable in these analyses.
Technical note: Unless specified otherwise, all of these analyses use “effect coding” for categorical variables (e.g., country, category of question) – meaning that each country/langauge is compared to the “grand mean” collapsing across all countries/languages. Because of degrees of freedom issues, each analysis only compares 4 of the 5 countries to the grand mean – by default, I’ve left out the comparison of the US/English to the grand mean, but stats for that comparison could easily be calculated (if we left out another country/language instead). This is just to say that you won’t see statements like “The effect was exaggerated in the US relative to other countries,” although they might be true.
KW Analysis #1
First, I used a mixed effects logistic regression predicting how likely a participant was to write “believe” based on the superordinate category of the question (“religious” questions or “fact” questions), the country they were in/language they were using (US/English, Ghana/Fante, Thailand/Thai, China/Mandarin, or Vanuatu/Bislama), and an interaction between them, with a maximal random effects structure (random interpcepts and slopes by subject, and random intercepts by question). This analysis gives me a sense of (1) Whether participants were more likely to write “believe” for religious questions than fact questions, and whether this tendency varied by country/language, controlling for the fact that the overall rates of circling “believe” might vary by country/language (and accounting for individual differences and differences across individual questions).
Note that this analysis treats responses of “think” as the same as any other non-“believe” response – I’m just trying to predict how likey the participant was to write in “believe.”
r2.1 <- lmer(believeX ~ super_cat * country
+ (1 + super_cat | thb2_subj) + (1 | question),
# + (1 + super_cat || thb2_subj) + (1 | question),
# + (1 + super_cat | thb2_subj),
# + (1 + super_cat || thb2_subj),
# + (1 | thb2_subj) + (1 | question),
data = d2_long)
funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas:
# Simple named list:
list(mean = mean, median = median)
# Auto named with `tibble::lst()`:
tibble::lst(mean, median)
# Using lambdas
list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
[90mThis warning is displayed once per session.[39m
| Parameter |
β |
β' |
β'' |
Std. Err. |
df |
t |
p |
|
| Intercept |
0.19 |
- |
- |
0.01 |
55.49 |
13.80 |
<0.001 |
*** |
| Category (religious) |
0.13 |
0.35 |
0.35 |
0.01 |
40.79 |
10.58 |
<0.001 |
*** |
| Country (Gh.) |
-0.09 |
-0.14 |
-0.14 |
0.02 |
383.00 |
-4.57 |
<0.001 |
*** |
| Country (Th.) |
0.01 |
0.01 |
0.01 |
0.02 |
383.00 |
0.55 |
0.584 |
|
| Country (Ch.) |
0.03 |
0.05 |
0.05 |
0.02 |
383.00 |
1.80 |
0.073 |
|
| Country (Vt.) |
-0.03 |
-0.06 |
-0.06 |
0.02 |
383.00 |
-2.03 |
0.043 |
* |
| Category (religious) × Country (Gh.) |
-0.07 |
-0.11 |
-0.11 |
0.02 |
383.01 |
-4.53 |
<0.001 |
*** |
| Category (religious) × Country (Th.) |
0.01 |
0.01 |
0.01 |
0.01 |
383.01 |
0.61 |
0.541 |
|
| Category (religious) × Country (Ch.) |
0.04 |
0.07 |
0.07 |
0.01 |
383.01 |
3.24 |
0.001 |
** |
| Category (religious) × Country (Vt.) |
-0.04 |
-0.07 |
-0.07 |
0.01 |
383.01 |
-3.05 |
0.002 |
** |
The effects of primary interest are in bold:
- Category (religious): Collapsing across countries/languages, participants were indeed more likely to say “believe” for “religious” questions, echoing the forced choice results of Think Believe 1.
- Country (Gh.): Participants in Ghana were generally less likely than other participants to say “believe,” collapsing across question categories. (This is in contrast to Think Believe 1, in which they were more likely to circle “believe.”)
- Country (Th.): Participants in Thailand were no more or less likely than other participants to say “believe,” collapsing across question categories. (This is in contrast to Think Believe 1, in which they were less likely to circle “believe.”)
- Country (Ch.): Participants in China were no more or less likely than other participants to say “believe,” caollapsing across question categories. (They did not differ from the grand mean in Think Believe 1.)
- Country (Vt.): Participants in Vanuatu were no more or less likely than other participants to say “believe,” collapsing across question categories. (They did not differ from the grand mean in Think Believe 1.)
- Category (religious) x Country (Gh.): The difference in rates of “believe” responses between question categories was smaller in Ghana than in other countries, echoing the forced choice results of Think Believe 1.
- Category (religious) x Country (Th.): The difference in rates of “believe” responses between question categories was no smaller or larger in Thailand than in other countries. (In Think Believe 1, the difference was exaggerated in Thailand.)
- Category (religious) x Country (Ch.): The difference in rates of “believe” responses between question categories was larger in China than in other countries. (In Think Believe 1, this difference did not differ from the difference in other countries.)
- Category (religious) x Country (Vt.): The difference in rates of “believe” responses between question categories was smaller in Vanuatu than in other countries. (In Think Believe 1, this difference did not differ from the difference in other countries.)
Take-away: The predicted effect is evident in this dataset, as it was in Think Believe 1. It appears to be exaggerated in China and diminished in Ghana and Vanuatu, a pattern which differs from Think Believe 1.
KW Analyses #1a-1e (by country)
Next, I did this same analysis within each country/langauge alone (using the most maximal random effect structure that converged across all countries/languages).
# note: using most maximal common random effects structure
r2.1_us <- lmer(believeX ~ super_cat +
# (1 + super_cat | thb2_subj) + (1 | question),
# (1 + super_cat || thb2_subj) + (1 | question),
# (1 | thb2_subj) + (1 | question),
(1 + super_cat | thb2_subj),
# (1 + super_cat || thb2_subj),
# (1 | thb2_subj),
data = d2_long %>% filter(country == "US"))
r2.1_gh <- lmer(believeX ~ super_cat +
# (1 + super_cat | thb2_subj) + (1 | question),
# (1 + super_cat || thb2_subj) + (1 | question),
# (1 | thb2_subj) + (1 | question),
(1 + super_cat | thb2_subj),
# (1 + super_cat || thb2_subj),
# (1 | thb2_subj),
data = d2_long %>% filter(country == "Ghana"))
r2.1_th <- lmer(believeX ~ super_cat +
# (1 + super_cat | thb2_subj) + (1 | question), # failed to converge
# (1 + super_cat || thb2_subj) + (1 | question), # failed to converge
(1 | thb2_subj) + (1 | question),
# (1 + super_cat | thb2_subj),
# (1 + super_cat || thb2_subj),
# (1 | thb2_subj),
data = d2_long %>% filter(country == "Thailand"))
r2.1_ch <- lmer(believeX ~ super_cat +
# (1 + super_cat | thb2_subj) + (1 | question),
# (1 + super_cat || thb2_subj) + (1 | question),
# (1 | thb2_subj) + (1 | question), # failed to converge
(1 + super_cat | thb2_subj),
# (1 + super_cat || thb2_subj),
# (1 | thb2_subj),
data = d2_long %>% filter(country == "China"))
r2.1_vt <- lmer(believeX ~ super_cat +
# (1 + super_cat | thb2_subj) + (1 | question),
# (1 + super_cat || thb2_subj) + (1 | question),
# (1 | thb2_subj) + (1 | question),
(1 + super_cat | thb2_subj),
# (1 + super_cat || thb2_subj),
# (1 | thb2_subj),
data = d2_long %>% filter(country == "Vanuatu"))
| Country |
Parameter |
β |
Std. Err. |
df |
t |
p |
|
| US |
Intercept |
0.28 |
0.02 |
69.98 |
13.90 |
<0.001 |
*** |
| Category (religious) |
0.20 |
0.02 |
70.00 |
11.48 |
<0.001 |
*** |
| Ghana |
Intercept |
0.09 |
0.02 |
44.99 |
4.20 |
<0.001 |
*** |
| Category (religious) |
0.06 |
0.01 |
45.00 |
4.06 |
<0.001 |
*** |
| Thailand |
Intercept |
0.19 |
0.02 |
78.96 |
9.90 |
<0.001 |
*** |
| Category (religious) |
0.14 |
0.01 |
23.00 |
10.83 |
<0.001 |
*** |
| China |
Intercept |
0.21 |
0.02 |
99.86 |
14.03 |
<0.001 |
*** |
| Category (religious) |
0.17 |
0.01 |
100.73 |
12.32 |
<0.001 |
*** |
| Vanuatu |
Intercept |
0.15 |
0.02 |
71.98 |
8.16 |
<0.001 |
*** |
| Category (religious) |
0.09 |
0.01 |
72.00 |
6.83 |
<0.001 |
*** |
The effects of primary interest are in bold, and the take-away is clear: In every country/language, participants were more likely to say “believe” in “religious” questions than in “fact” questions.
KW Analysis #2
In this analysis, I treated country/language as a random rather than fixed effect (with participants nested within countries).
r2.2 <- lmer(believeX ~ super_cat
# + (1 + super_cat | country/thb2_subj) + (1 | question), # failed to converge
# + (1 + super_cat || country/thb2_subj) + (1 | question), # failed to converge
# + (1 + super_cat | country/thb2_subj), # failed to converge
# + (1 + super_cat || country/thb2_subj), # failed to converge
# + (1 | country/thb2_subj) + (1 | question), # failed to converge
+ (1 | country/thb2_subj),
data = d2_long)
| Parameter |
β |
Std. Err. |
df |
t |
p |
|
| Intercept |
0.19 |
0.03 |
3.83 |
7.34 |
0.002 |
** |
| Category (religious) |
0.14 |
0.00 |
9311.02 |
42.15 |
<0.001 |
*** |
The effect still holds.
KW Analysis #3
Finally, I ran a version of this first model looking at 5 categories of questions (rather than 2 superordinate categories): Christian religious, Buddhist religious, well-known fact, esoteric fact, and personal fact. I compared these categories using planned orthogonal contrasts.
r2.3 <- lmer(believeX ~ category * country
+ (1 + category | thb2_subj) + (1 | question),
# + (1 + category || thb2_subj) + (1 | question),
# + (1 + category | thb2_subj),
# + (1 + category || thb2_subj),
# + (1 | thb2_subj) + (1 | question),
data = d2_long)
| Parameter |
β |
Std. Err. |
df |
t |
p |
|
| Intercept |
| Intercept |
0.16 |
0.01 |
53.95 |
14.60 |
<0.001 |
*** |
| Category comparisons |
| Category (Religious vs. fact) |
0.05 |
0.00 |
44.39 |
12.41 |
<0.001 |
*** |
| Category (Christian vs. Buddhist religious) |
0.05 |
0.01 |
25.53 |
3.18 |
0.004 |
** |
| Category (well-known & esoteric vs. personal fact) |
0.01 |
0.01 |
20.68 |
1.78 |
0.090 |
|
| Category (well-known vs. esoteric fact) |
0.01 |
0.01 |
20.50 |
0.55 |
0.588 |
|
| Country comparisons |
| Country (Gh.) |
-0.08 |
0.02 |
382.94 |
-4.45 |
<0.001 |
*** |
| Country (Th.) |
0.01 |
0.01 |
382.94 |
0.52 |
0.603 |
|
| Country (Ch.) |
0.02 |
0.01 |
382.94 |
1.48 |
0.140 |
|
| Country (Vt.) |
-0.03 |
0.01 |
382.94 |
-1.79 |
0.074 |
|
| Interactions: Ghana |
| Category (Religious vs. fact) × Country (Gh.) |
-0.03 |
0.01 |
384.54 |
-4.62 |
<0.001 |
*** |
| Category (Christian vs. Buddhist religious) × Country (Gh.) |
-0.02 |
0.02 |
382.99 |
-1.21 |
0.227 |
|
| Category (well-known & esoteric vs. personal fact) × Country (Gh.) |
0.00 |
0.01 |
3216.39 |
-0.44 |
0.657 |
|
| Category (well-known vs. esoteric fact) × Country (Gh.) |
0.00 |
0.01 |
7596.51 |
-0.08 |
0.938 |
|
| Interactions: Thailand |
| Category (Religious vs. fact) × Country (Th.) |
0.00 |
0.00 |
384.54 |
0.62 |
0.533 |
|
| Category (Christian vs. Buddhist religious) × Country (Th.) |
-0.03 |
0.01 |
382.99 |
-2.61 |
0.009 |
** |
| Category (well-known & esoteric vs. personal fact) × Country (Th.) |
0.00 |
0.00 |
3216.39 |
-0.93 |
0.353 |
|
| Category (well-known vs. esoteric fact) × Country (Th.) |
0.00 |
0.01 |
7596.51 |
0.21 |
0.834 |
|
| Interactions: China |
| Category (Religious vs. fact) × Country (Ch.) |
0.02 |
0.00 |
384.54 |
3.31 |
0.001 |
** |
| Category (Christian vs. Buddhist religious) × Country (Ch.) |
0.02 |
0.01 |
382.99 |
1.94 |
0.053 |
|
| Category (well-known & esoteric vs. personal fact) × Country (Ch.) |
0.00 |
0.00 |
3216.39 |
-0.17 |
0.867 |
|
| Category (well-known vs. esoteric fact) × Country (Ch.) |
0.01 |
0.01 |
7596.51 |
0.66 |
0.508 |
|
| Interactions: Vanuatu |
| Category (Religious vs. fact) × Country (Vt.) |
-0.02 |
0.01 |
384.54 |
-3.11 |
0.002 |
** |
| Category (Christian vs. Buddhist religious) × Country (Vt.) |
0.03 |
0.01 |
382.99 |
2.29 |
0.023 |
* |
| Category (well-known & esoteric vs. personal fact) × Country (Vt.) |
0.00 |
0.01 |
3216.39 |
0.80 |
0.425 |
|
| Category (well-known vs. esoteric fact) × Country (Vt.) |
0.00 |
0.01 |
7596.52 |
-0.20 |
0.839 |
|
The first orthogonal contrast compared the two “religious” categories to the three “fact” categories (“Category (Religoius vs. fact)”). This parallels the previous analyses, and the results are similar: Overall, participants were more likely to write “believe” for religious questions than fact questions, and this tendency was diminished in Ghana and Vanuatu, and exaggerated in China.
The second orthogonal contrast compared Christian to Buddhist “religious” questions. Overall, participants were more likely to write “believe” for Christian questions, and this tendency was exaggerated in Vanuatu and diminished in Thailand (partially echoing Think Believe 1).
The third orthogonal contrast compared well-known and esoteric facts, on the one hand, to personal facts, on the other. Overall, there was no reliable difference in rates of “believe” between these groups of questions (in contrast to Think Believe 1, in which participants were more likely to circle “believe” for well-known and esoteric facts). This difference did not vary by country.
The fourth orthogonal contrast compared well-known to esoteric facts. Overall, there was no reliable difference in rates of “believe” between these groups of questions (in contrast to Think Believe 1, in which participants were more likely to circle “believe” for well-known facts). This difference did not vary by country.
Note that these findings statistically control for differences across samples in the overall rate of writing “believe” (which was generally lower in Ghana).
Analysis: Based on preregistration
From preregistration:
“Survey 1: We will conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 2 (Statement Type: religion vs. fact) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form the word “believe” (or its respective translation) as the dependent measure. To look for finer-grained differences between different religious and factual statements, we will also conduct a 5 (Site: China vs. Thailand vs. Vanuatu vs. Ghana vs. United States) x 5 (Statement Type: Buddhist religious statements vs. Christian religious statements vs. life facts vs. well-known facts vs. esoteric facts) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants completed sentences using a form of the word “believe” (or its respective translation) as the dependent measure. In all cases where omnibus ANOVAs are significant, we will conduct pairwise analyses comparing each statement type with each other statement type and each site with each other site."
d2_anova <- d2_long %>%
distinct(thb2_subj, country, super_cat, question, believeX) %>%
group_by(thb2_subj, country, super_cat) %>%
summarise(prop_believeX = mean(believeX)) %>%
ungroup() %>%
mutate(thb2_subj = factor(thb2_subj))
contrasts(d2_anova$country) <- contrast_country
contrasts(d2_anova$super_cat) <- contrast_super_cat
Prereg Analysis #1
Here is the first preregistered analyis: a 5 (country) x 2 (question category) mixed ANOVA with repeated measures on the second factor and the proportion of trials on which participants wrote “berlieve” as the DV.
r2.4 <- d2_anova %>%
anova_test(dv = prop_believeX,
wid = thb2_subj,
between = country,
within = super_cat)
get_anova_table(r2.4)
ANOVA Table (type III tests)
Effect DFn DFd F p p<.05 ges
1 country 4 383 10.868 2.35e-08 * 0.065
2 super_cat 1 383 359.606 5.00e-57 * 0.268
3 country:super_cat 4 383 12.586 1.25e-09 * 0.049
This analysis aligns with the regressions above and with Think Believe 1, suggesting that participants’ tendency to write “believe” varied by country/language (country) and by question category (super_cat), and the difference between question category varied across countries/languages (i.e., there was an interaction: country:super_cat).
The preregistration indicated that we’d conduct pairwise follow-up analyses comparing the two question categories and comparing pairs of countires/languages – but, again, I don’t really think we’re interested in comparing pairs of countries/languages, so I’m going to skip that for now. Instead, I’ll compare the two questions categories within each country/language (to explore the significant interaction), as I did for Think Believe 1.
Here we go:
Comparing question categories
r2.5a <- t.test(prop_believeX ~ super_cat, paired = T, d2_anova); r2.5a
Paired t-test
data: prop_believeX by super_cat
t = 19.793, df = 387, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.2509326 0.3062839
sample estimates:
mean of the differences
0.2786082
Collapsing across countries/languages, participants wrote significantly more “believe” responses for questions in the religious category (28%) than they did for questions in the fact category (NA%).
Comparing question categories within countries/languages
# US
r2.5b_us <- t.test(prop_believeX ~ super_cat, paired = T,
d2_anova %>% filter(country == "US")); r2.5b_us
Paired t-test
data: prop_believeX by super_cat
t = 11.476, df = 70, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.3312579 0.4706201
sample estimates:
mean of the differences
0.400939
# Ghana
r2.5b_gh <- t.test(prop_believeX ~ super_cat, paired = T,
d2_anova %>% filter(country == "Ghana")); r2.5b_gh
Paired t-test
data: prop_believeX by super_cat
t = 4.0562, df = 45, p-value = 0.0001957
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.05691244 0.16917452
sample estimates:
mean of the differences
0.1130435
# Thailand
r2.5b_th <- t.test(prop_believeX ~ super_cat, paired = T,
d2_anova %>% filter(country == "Thailand")); r2.5b_th
Paired t-test
data: prop_believeX by super_cat
t = 9.7482, df = 97, p-value = 4.691e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.2210417 0.3340604
sample estimates:
mean of the differences
0.277551
# China
r2.5b_ch <- t.test(prop_believeX ~ super_cat, paired = T,
d2_anova %>% filter(country == "China")); r2.5b_ch
Paired t-test
data: prop_believeX by super_cat
t = 12.57, df = 99, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.2880159 0.3959841
sample estimates:
mean of the differences
0.342
# Vanuatu
r2.5b_vt <- t.test(prop_believeX ~ super_cat, paired = T,
d2_anova %>% filter(country == "Vanuatu")); r2.5b_vt
Paired t-test
data: prop_believeX by super_cat
t = 6.8338, df = 72, p-value = 2.235e-09
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.1264582 0.2306194
sample estimates:
mean of the differences
0.1785388
The difference between question categories was significant in each country/language considered alone.
Free response data
Here’s a very quick pass at looking at the most common words/phrases in these free responses – I did a quick and dirty “stemming” (converting, e.g., “believe” and “believes” and “believed” all to the stem “believ”) but we could look into doing something more sophisticated. Here are the top 5 stems for each question category, by country:
| country |
super_cat |
category |
response_lemma2 |
percent |
n |
| US |
religious |
Christian religious |
believe |
52% |
184 |
| think |
21% |
74 |
| say |
10% |
37 |
| know |
5% |
17 |
| read |
2% |
8 |
| Buddhist religious |
believe |
43% |
154 |
| think |
27% |
95 |
| say |
9% |
32 |
| know |
4% |
15 |
| learn |
4% |
15 |
| fact |
well-known fact |
know |
45% |
158 |
| think |
18% |
65 |
| believe |
10% |
35 |
| say |
8% |
29 |
| learn |
5% |
16 |
| esoteric fact |
think |
26% |
92 |
| know |
19% |
69 |
| say |
11% |
38 |
| believe |
9% |
33 |
| learn |
8% |
29 |
| life fact |
think |
28% |
100 |
| say |
16% |
58 |
| know |
15% |
55 |
| forget |
5% |
16 |
| believe |
4% |
15 |
| Ghana |
religious |
Christian religious |
know |
29% |
67 |
| believe |
17% |
40 |
| say |
16% |
36 |
| hear |
12% |
27 |
| see |
7% |
17 |
| Buddhist religious |
know |
23% |
52 |
| say |
17% |
40 |
| believe |
12% |
28 |
| see |
12% |
28 |
| think |
12% |
27 |
| fact |
well-known fact |
know |
35% |
81 |
| hear |
15% |
34 |
| say |
13% |
30 |
| think |
10% |
23 |
| see |
6% |
14 |
| esoteric fact |
know |
33% |
77 |
| say |
15% |
35 |
| think |
14% |
33 |
| hear |
12% |
28 |
| see |
6% |
14 |
| life fact |
know |
23% |
52 |
| say |
18% |
41 |
| think |
14% |
32 |
| see |
11% |
26 |
| not know |
8% |
18 |
| Thailand |
religious |
Christian religious |
believe |
33% |
164 |
| think |
26% |
126 |
| tell |
12% |
57 |
| know |
6% |
31 |
| say |
4% |
19 |
| Buddhist religious |
believe |
31% |
153 |
| think |
24% |
117 |
| know |
15% |
72 |
| tell |
11% |
54 |
| say |
4% |
20 |
| fact |
well-known fact |
know |
33% |
160 |
| think |
24% |
117 |
| tell |
17% |
82 |
| believe |
7% |
34 |
| say |
5% |
24 |
| esoteric fact |
think |
32% |
157 |
| know |
19% |
93 |
| tell |
12% |
60 |
| imagine |
6% |
29 |
| believe |
5% |
24 |
| life fact |
think |
36% |
178 |
| tell |
21% |
101 |
| know |
17% |
85 |
| believe |
4% |
18 |
| expect |
3% |
14 |
| China |
religious |
Christian religious |
believe |
40% |
202 |
| think |
29% |
146 |
| feel |
3% |
17 |
| do not believe |
3% |
14 |
| [adverb] believe |
2% |
10 |
| say |
2% |
10 |
| Buddhist religious |
think |
31% |
156 |
| believe |
27% |
135 |
| know |
5% |
23 |
| feel |
3% |
17 |
| do not believe |
3% |
14 |
| fact |
well-known fact |
know |
57% |
285 |
| think |
11% |
55 |
| believe |
6% |
29 |
| say |
4% |
22 |
| be sure of |
3% |
13 |
| esoteric fact |
know |
32% |
160 |
| think |
17% |
86 |
| do not know |
5% |
27 |
| say |
5% |
23 |
| believe |
4% |
20 |
| life fact |
know |
18% |
91 |
| discover |
8% |
42 |
| say |
8% |
41 |
| think |
8% |
41 |
| find |
6% |
32 |
| remember |
6% |
32 |
| Vanuatu |
religious |
Christian religious |
believe |
31% |
114 |
| say |
19% |
69 |
| know |
8% |
28 |
| think |
7% |
27 |
| pray |
2% |
9 |
| Buddhist religious |
say |
26% |
94 |
| believe |
16% |
59 |
| see |
11% |
39 |
| think |
9% |
34 |
| know |
5% |
19 |
| fact |
well-known fact |
know |
21% |
76 |
| say |
21% |
76 |
| think |
9% |
34 |
| believe |
8% |
31 |
| find out |
4% |
13 |
| esoteric fact |
say |
22% |
81 |
| think |
12% |
44 |
| know |
11% |
39 |
| believe |
7% |
26 |
| see |
6% |
21 |
| life fact |
say |
29% |
105 |
| know |
18% |
64 |
| think |
8% |
29 |
| want |
6% |
23 |
| forget |
5% |
19 |
I think there’s lots to discuss here – e.g., the common use of “know” (which I think is already of interest). Also, the Bislama data appears to be in Bislama (not translated) – I’ve included “bilif” (and spelling variants) as “believe” and “ting” (as spelling variants) as “think” in all of the foregoing analyses.
Column `response_lemma2` joining factor and character vector, coercing into character vector

LS0tCnRpdGxlOiAiVGhpbmsgQmVsaWV2ZSAyIChmcmVlIHJlc3BvbnNlKSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cH0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGLCBtZXNzYWdlID0gRikKYGBgCmthYmxlCkluIHRoaXMgbm90ZWJvb2sgd2UgYW5hbHl6ZSB0aGUgc2Vjb25kICJ0aGluay9iZWxpZXZlIiB0YXNrLCBpbiB3aGljaCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIGEgc2VyaWVzIG9mIGZpbGwtaW4tdGhlLWJsYW5rcyB3aXRoIGZyZWUgcmVzcG9uc2VzLgoKCmBgYHtyfQpzb3VyY2UoIi4vc2NyaXB0cy9kZXBlbmRlbmNpZXMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2N1c3RvbV9mdW5zLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy92YXJfcmVjb2RlX2NvbnRyYXN0LlIiKQpgYGAKCmBgYHtyfQpkMl9yYXcgPC0gcmVhZF94bHN4KCIuLi9kYXRhL1RoaW5rQmVsaWV2ZTJfb3JnYW5pemVkLnhsc3giLCBzaGVldCA9ICJWMSZWMiBubyBkdXBlcyIpICU+JQogICMgZW5zdXJlIG5vIGR1cGxpY2F0ZXMKICBncm91cF9ieSh0aGIyX3N1YmopICU+JQogIHRvcF9uKDEsIHRoYjJfYmF0YykgJT4lIAogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUodGhiMl9jdHJ5ID0gZmFjdG9yKHRoYjJfY3RyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKQpgYGAKCmBgYHtyfQprZXkyIDwtIHJlYWRfeGxzeCgiLi4vZGF0YS9UaGlua0JlbGlldmUyX29yZ2FuaXplZC54bHN4Iiwgc2hlZXQgPSAxKVsxLF0gJT4lIAogIGRhdGEuZnJhbWUoKSAlPiUKICAjIGdldCByaWQgb2YgZXh0cmEgcXVhbHRyaWNzIHF1ZXN0aW9ucwogIHNlbGVjdCgtYyhTdGFydERhdGU6VXNlckxhbmd1YWdlKSkgJT4lCiAgdCgpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigicXVlc3Rpb24iKSAlPiUKICByZW5hbWUocXVlc3Rpb25fdGV4dCA9ICIuIikgJT4lCiAgIyBnZXQgcmlkIG9mIHdoaXRlIHNwYWNlCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCJcXHMrIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgIyBoYW5kIGNvZGUgcXVlc3Rpb24gY2F0ZWdvcmllcwogIG11dGF0ZShjYXRlZ29yeSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJmaW5hbCBwYXBlciIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImhpZ2h3YXkgaW50byB0b3duIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiZ3JvY2VyeSBzdG9yZSIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImNoZW1pc3RyeSBib29rIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiY29va2luZyBub29kbGVzIiwgcXVlc3Rpb25fdGV4dCkgfiAibGlmZSBmYWN0IiwKICAgIGdyZXBsKCJwcmF5aW5nIHRvIEdvZCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImFuZ2VscyBkZWxpdmVyIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiZ28gdG8gSGVhdmVuIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiY2hhbmdlZCB3YXRlciIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImh1bWFuIHNpbnMiLCBxdWVzdGlvbl90ZXh0KSB+ICJDaHJpc3RpYW4gcmVsaWdpb3VzIiwKICAgIGdyZXBsKCJjeWNsZSBvZiBkZWF0aCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoIkJ1ZGRoYSBmb3VuZCBzcGlyaXR1YWwiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJsb3R1cyBmbG93ZXIgYmxvb21lZCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImdob3N0cyBzdWZmZXIiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJidXJuaW5nIGluY2Vuc2UiLCBxdWVzdGlvbl90ZXh0KSB+ICJCdWRkaGlzdCByZWxpZ2lvdXMiLAogICAgZ3JlcGwoIm1vb24gZ29lcyBhcm91bmQiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJCYXJhY2sgT2JhbWEiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJ1c2luZyBiYXR0ZXJpZXMiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJCcmF6aWwiLCBxdWVzdGlvbl90ZXh0KSB8CiAgICAgIGdyZXBsKCJhbmNpZW50IFJvbWFuIiwgcXVlc3Rpb25fdGV4dCkgfiAid2VsbC1rbm93biBmYWN0IiwKICAgIGdyZXBsKCJvY3RvcHVzIiwgcXVlc3Rpb25fdGV4dCkgfAogICAgICBncmVwbCgiSm9obiBCcm93biIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoInRhbGxlciBtb3VudGFpbiIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoInNwZWNpZXMgb2YgZmlzaCIsIHF1ZXN0aW9uX3RleHQpIHwKICAgICAgZ3JlcGwoImNvbnRhaW5zIG1vcmUgY29wcGVyIiwgcXVlc3Rpb25fdGV4dCkgfiAiZXNvdGVyaWMgZmFjdCIsCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JQogIG11dGF0ZShjYXRlZ29yeSA9IGZhY3RvcihjYXRlZ29yeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkNocmlzdGlhbiByZWxpZ2lvdXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVkZGhpc3QgcmVsaWdpb3VzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlbGwta25vd24gZmFjdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlc290ZXJpYyBmYWN0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpZmUgZmFjdCIpKSwKICAgICAgICAgc3VwZXJfY2F0ID0gY2FzZV93aGVuKGdyZXBsKCJmYWN0IiwgY2F0ZWdvcnkpIH4gImZhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoInJlbGlnaW91cyIsIGNhdGVnb3J5KSB+ICJyZWxpZ2lvdXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICBzdXBlcl9jYXQgPSBmYWN0b3Ioc3VwZXJfY2F0LCBsZXZlbHMgPSBjKCJyZWxpZ2lvdXMiLCAiZmFjdCIpKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlciIpICU+JQogIG11dGF0ZShvcmRlciA9IGFzLm51bWVyaWMob3JkZXIpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHRfc2hvcnQgPSBnc3ViKCJeLip0aGF0ICIsICIuLi4iLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgdmFyX25hbWUgPSBuYW1lcyhkMl9yYXdbbmFtZXMoZDJfcmF3KSAhPSAidGhiMl92ZXJzaW9uIl0pKQpgYGAKCmBgYHtyfQpkMiA8LSBkMl9yYXcgJT4lCiAgZmlsdGVyKHRoYjJfY3RyeSAlaW4lIGxldmVsc19jb3VudHJ5KSAlPiUKICBtdXRhdGUodGhiMl9jdHJ5ID0gZmFjdG9yKHRoYjJfY3RyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICB0aGIyX2RlbW9fc2V4ID0gZmFjdG9yKHRoYjJfZGVtb19zZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTWFsZSIsICJGZW1hbGUiLCAiT3RoZXIiKSksIAogICAgICAgICB0aGIyX2RlbW9fYWdlID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodGhiMl9kZW1vX2FnZSkpKSAlPiUKICBtdXRhdGVfYXQodmFycyh0aGIyX2RlbW9fcmVncCwgdGhiMl9kZW1vX29sYW5nKSwKICAgICAgICAgICAgZnVucyhmYWN0b3IoLiwgbGV2ZWxzID0gYygiTk8iLCAiWUVTIikpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnModGhiMl9kZW1vX3JlbHksIHRoYjJfZGVtb19pbXByLCB0aGIyX2RlbW9faW1zbiksIAogICAgICAgICAgICBmdW5zKGZhY3RvciguLCBsZXZlbHMgPSAxOjcpKSkgJT4lCiAgbXV0YXRlKHRoYjJfZGVtb193b3JzID0gZmFjdG9yKHRoYjJfZGVtb193b3JzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTmV2ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25jZSBhIHllYXIgb3IgbGVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgZmV3IHRpbWVzIGEgeWVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9uY2Ugb3IgdHdpY2UgYSBtb250aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IHdlZWsgb3IgbW9yZSBvZnRlbiIpKSwKICAgICAgICAgdGhiMl9kZW1vX2Jnb2QgPSBmYWN0b3IodGhiMl9kZW1vX2Jnb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5vdCBhdCBhbGwgYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc2xpZ2h0bHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIG1vZGVyYXRlbHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHN0cm9uZ2x5IikpLAogICAgICAgICB0aGIyX2RlbW9fYmJ1aCA9IGZhY3Rvcih0aGIyX2RlbW9fYmJ1aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiTm90IGF0IGFsbCBiZWxpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzbGlnaHRseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgbW9kZXJhdGVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJlbGlldmUgc3Ryb25nbHkiKSksCiAgICAgICAgIHRoYjJfZGVtb19ib3NwID0gZmFjdG9yKHRoYjJfZGVtb19ib3NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOb3QgYXQgYWxsIGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxpZXZlIHNsaWdodGx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBtb2RlcmF0ZWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmVsaWV2ZSBzdHJvbmdseSIpKSwKICAgICAgICAgdGhiMl9kZW1vX2F0c24gPSBmYWN0b3IodGhiMl9kZW1vX2F0c24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgc3VwZXJuYXR1cmFsIGZvcmNlcyBvciBiZWluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZSBjYW5ub3Qga25vdyBpZiB0aGVyZSBhcmUgc3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlcmUgbWlnaHQgYmUgc3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3VwZXJuYXR1cmFsIGZvcmNlcyBhbmQgYmVpbmdzIGV4aXN0IGJ1dCB3ZSBjYW5ub3Qga25vdyB3aGF0IHRoZXkgYXJlIGxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGVyZSBkZWZpbml0ZWx5IGFyZSBzdXBlcm5hdHVyYWwgZm9yY2VzIGFuZCBiZWluZ3MiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHRoYjJfZGVtb19yZWx5LCB0aGIyX2RlbW9faW1wciwgdGhiMl9kZW1vX3dvcnMsIHRoYjJfZGVtb19iZ29kLCAKICAgICAgICAgICAgICAgICB0aGIyX2RlbW9fYmJ1aCwgdGhiMl9kZW1vX2Jvc3AsIHRoYjJfZGVtb19hdHNuLCB0aGIyX2RlbW9faW1zbiksIAogICAgICAgICAgICBmdW5zKG51bSA9IGFzLm51bWVyaWMoLikgLSAxKSkKCmNvbnRyYXN0cyhkMiR0aGIyX2N0cnkpID0gY29udHJhc3RfY291bnRyeQpgYGAKCk5vdGU6IFRoZXJlIGFyZSBzb21lIHN1YmplY3RpdmUgY2FsbHMgaGVyZSwgYW5kIHRyYW5zbGF0aW9uIGlzc3Vlcy4gRm9yIG5vdywgSSd2ZSB1c2VkIGEgY29tYmluYXRpb24gb2YgYXV0b21hdGljICJsZW1tYXRpemF0aW9uIiBhbmQgaGFuZC1jb2RpbmcgdG8gZG8gbXkgYmVzdCB0byBjb2RlIHdoZXRoZXIgcmVzcG9uc2VzIHNob3VsZCBjb3VudCBhcyAiYmVsaWV2ZSIgKGUuZy4sIGluY2x1ZGluZyBvYnZpb3VzIGNhc2VzIGxpa2UgImJlbGlldmVzIiBhbmQgImJlbGlldmVkIjsgaW5jbHVkaW5nIEJpc2xhbWEgImJlbGlmIiBhbmQgImJpbGlmIiBhbmQgb3RoZXIgc3BlbGxpbmdzKS4KCkFzIG9mIDIwMjAtMDEtMjIsIEkgaGF2ZSB0d28gdmVyc2lvbnMgb2YgdGhlc2UgdmFyaWFibGVzIC0tIG9uZSB0aGF0IG9ubHkgaW5jbHVkZXMgcmVzcG9uc2VzIHRoYXQgYXJlIHN0cmljdGx5ICJiZWxpZXZlIiBhbmQgb25lIHRoYXQgYWxzbyBpbmNsdWRlcyBjYXNlcyB0aGF0IGludm9sdmUgdGhlIHdvcmQgImJlbGlldmUiIChlLmcuLCAiZmlybWx5IGJlbGlldmVzLCIgImRvZXMgbm90IGJlbGlldmUiKSAtLSBhbmQgbGlrZXdpc2UgZm9yIHRoaW5rLiBUaGUgbG9vc2VyIGludGVycHJldGF0aW9ucyBhcmUgY2FsbGVkIGBiZWxpZXZlWGAgKG9yICJiZWxpZWZcKiIpIGFuZCBgdGhpbmtYYCAob3IgInRoaW5rXCoiKS4KCmBgYHtyfQpkMl9sb25nIDwtIGQyICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIHRoYjJfZ2hvc3RzaHVuZ2VyOnRoYjJfb2JhbWEpICU+JQogIG11dGF0ZShyZXNwb25zZV9sZW1tYSA9IGxlbW1hdGl6ZV9zdHJpbmdzKHRvbG93ZXIocmVzcG9uc2UpKSwKICAgICAgICAgcmVzcG9uc2VfbGVtbWEgPSBnc3ViKCJcXCggIiwgIiIsIHJlc3BvbnNlX2xlbW1hKSwKICAgICAgICAgcmVzcG9uc2VfbGVtbWEgPSBnc3ViKCIgXFwpIiwgIiIsIHJlc3BvbnNlX2xlbW1hKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlX2xlbW1hMiA9IGNhc2Vfd2hlbigKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGFsZW0iLCAidGFsZW1hb3QiLCAidGFsbSIsICJibG8gdGFsZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAidGFsZW1vdXQiLCAiYmluIHRhbGVtIikgfiAic2F5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygibHVrIiwgImxvb2siLCAibHVraW0iLCAibHVrIHNhdmUiLCAibHVrIHZpc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImx1a3VtIiwgImJpbiBrbyBsdWsiLCAibG9rIikgfiAic2VlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYmVsaWV2ZSIsICJiZWxpZWYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXYiLCAiYmVsaXZzIiwgImJlbGl2ZWQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXZtIiwgImJlbGl2ZW0iLCAiYmVsaXZpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbGlmIiwgImJlbGlmcyIsICJiZWxpZmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaWYiLCAiYmVsaWZlbSIsICJiZWxpZmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlsaXYiLCAiYmlsaXZzIiwgImJpbGl2ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiaWxpdm0iLCAiYmlsaXZlbSIsICJiaWxpdmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlsaWYiLCAiYmlsaWZzIiwgImJpbGlmZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiaWxpZm0iLCAiYmlsaWZlbSIsICJiaWxpZmltIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaXZlIiwgImJlbGl2ZXMiLCAiYmVsaXZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbGl2ZSIsICJiaWxpdmVzIiwgImJpbGl2ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiZWxlaXZlIiwgImJlbGVpdmVzIiwgImJlbGVpdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsZWl2bSIsICJiZWxlaXZlbSIsICJiZWxlaXZpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbGl2aWVtIiwgImJlbGl2aWVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVpdiIsICJiZWl2ZXMiLCAiYmVpdmVkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaXZtIiwgImJlaXZlbSIsICJiZWl2aW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiZWxlaWYiLCAiYmVsZWlmcyIsICJiZWxlaWZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbGVpZm0iLCAiYmVsZWlmZW0iLCAiYmVsZWlmaW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVsaWV2ZW0iLCAid3UgYmVsaXZlIikgfiAiYmVsaWV2ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImJpbGl2IHN0cm9uZyIsICJibGluZGx5IGJlbGlldmUiLCAiZGVlcGx5IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJtbHkgYmVsaWV2ZSIsICJzdXJlbHkgYmVsaWV2ZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZ2x5IGJlbGlldmUiKSB+ICJbYWR2ZXJiXSBiZWxpZXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZG9lcyBub3QgYmVsaWV2ZSIsICJkb2Vzbid0IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkbyBub3QgYmVsaWV2ZSIsICJkb24ndCBiZWxpZXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkbid0IGJlbGlldmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJubyBiZWxpZXZlbSIpIH4gImRvIG5vdCBiZWxpZXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGhpbmsiLCAidGluZ3RpbmciLCAidGluayIsICJ0aG5rcyIsICJ0aW5rcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJlY2F1c2Ugc2hlIHRoaW5rIiwgInNoZSB0aGluayIsICJ0aGluZyIsICJ0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpbmsgcmlnaHQgdGhhdCIsICJ0aGluayB0aGF0IiwgInRoaW5rIHRoaW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpbmt0aGluayIsICJ1c2UgdG8gdGhpbmsiKSB+ICJ0aGluayIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRpbmdiYW90IiwgInRpbmdib2F0IiwgInRpbmcgYm90IiwgInRpbmdiYXV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGluZ2JvdCIsICJ0aW5naWJhb3QiLCAidGlua2Jhb3QiLCAidGhpbmdiYW90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaW5nYmF1dCIpIH4gInRoaW5rIGFib3V0L3JlbWVtYmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGhpbmsgb2YiKSB+ICJ0aGluayBvZiIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImRvZXMgbm90IHRoaW5rIiwgImRvZXNuJ3QgdGhpbmsiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZG8gbm90IHRoaW5rIiwgImRvbid0IHRoaW5rIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZG4ndCB0aGluayIsICJuZXZlciB0aGluayIsICJub3QgdGhpbmsiKSB+ICJkbyBub3QgdGhpbmsiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJYWCIpIH4gIlthZHZlcmJdIHRoaW5rIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygic2F2ZSIsICJzYXZlaCIsICJzYWUiKSB+ICJrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygibm8gc2F2ZSIsICJub3NhdmUiLCAibm8gc2FlIiwgIm5vc2FlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGJpbiBzYXZlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGtub3ciLCAiZG9lc24ndCBrbm93IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRvIG5vdCBrbm93IiwgImRvbid0IGtub3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaWRuJ3Qga25vdyIpIH4gImRvIG5vdCBrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygid2FudGVtIiwgIndhbnRlIiwgIndhbnRtIikgfiAid2FudCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImhhcmVtIiwgInN0YXAgaGFyZW0iKSB+ICJoZWFyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidG9rYmFvdCIsICJ0b2sgYm90IiwgInRva2Jhb3V0IiwgInRhbGtib2F0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRha2JvYXQiLCAidG9rYmF1dCIsICJ0b2thYm91dCIpIH4gImRlc2NyaWJlL2Rpc2N1c3MiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJyaWRpbSIsICJyZWFkaW0iLCAicmVhZG0iLCAicmlkZW0iLCAicmVhZGVtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZGVtIikgfiAicmVhZCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtpYW1hbiIsICJraWVtYW4iKSB+ICJsaWUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJsYW5lbSIpIH4gImxlYXJuIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidHJhc3RlbSIsICJ0cnVzdGVtIikgfiAidHJ1c3QiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJjb25mZW1lbSIsICJjb25maXJtZW0iKSB+ICJjb25maXJtIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZmFlbmVtIiwgImZhaW5lbSIsICJmaW5lbSIsICJiZSBmYWluZW0iLCAiZmluaWVtIikgfiAiZmluZCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImZyYWV0IiwgImZyaWdodCIpIH4gImZlYXIiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJsYWVrZW0iLCAibGlrZW0iLCAibGFpa2VtIikgfiAibGlrZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIm5vIGxpa2VtIikgfiAiZG8gbm90IGxpa2UiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzZWsiKSB+ICJiZSBzaGFrZW4iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzYXByYWlzIiwgInNhcHJhcyIsICJzYXByaWFzIikgfiAiYmUgc3VycHJpc2VkIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidGlqaW0iLCAidGl0amltIikgfiAidGVhY2giLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJ3YXJpIikgfiAid29ycnkiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJkcmVhbSIsICJkcmltIiwgImRyb2VtIikgfiAiZHJlYW0iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJlbmthcmVqIikgfiAiZW5jb3VyYWdlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZXhwbGVuZW0iKSB+ICJleHBsYWluIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZmFlbmVtYW90IiwgImZhZW5tYW90IiwgImZhaW5lbSBvdXQiLCAiZmFpbm1vYXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlubWFvdCIsICJmYWVuYW1hb3QiLCAiZmFlbmVtYXV0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaW5lbSBhb3QiLCAiZmFuZW1hdXQiLCAiZmluZW1hb3QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmluZW1vdXQiLCAiZmFlbmVtIG1hb3QiLCAiZmFlbmVtYWF0IiwgImZhZW5lbW9hdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhZW5lbW91dCIsICJmaW5lbSBhb3QiKSB+ICJmaW5kIG91dCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImZvZ2F0ZW0iLCAiZm9yZ2V0ZW0iLCAiZm9nZXRlbSIsICJmb2dhdGVtIiwgImZvZ2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9rZXRlbSIsICJmb3JnZXQiLCAiZm9rZXQiLCAiZm9rZXRvbSIpIH4gImZvcmdldCIsIAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJmcm9tIikgfiAiYmVjYXVzZSBvZiIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImhvcCIpIH4gImhvcGUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJpbWFnaW4iLCAiaW1hZ2luZW0iKSB+ICJpbWFnaW5lIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiaW5mb21lbSIsICJpbmZvcm1lbSIsICJpbmZvcm1lbiIpIH4gImluZm9ybSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImthc2VtIikgfiAicmVjZWl2ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtyb3MiKSB+ICJhbmdyeSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImt3ZXN0ZW4iLCAicXVlc3RlbmVtIikgfiAicXVlc3Rpb24iLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJub3Rpc2ltIikgfiAibm90aWNlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmljb25pemVtIiwgInJpY29uaXplbiIpIH4gInJlY29nbml6ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInJpbWVtYmFyZW0iLCAicmVtZW1iYSIsICJyZW1lbWJlciIpIH4gInJlbWVtYmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmlwb3QiLCAicmVwb3J0YW0iLCAicmlib3RlbSIpIH4gInJlcG9ydCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInNpbmdhb3QiKSB+ICJjYWxsIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygic293ZW0iLCAic29lbSIpIH4gInNob3ciLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJ3aXRobmVzc2VtIikgfiAid2l0bmVzcyIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImtlcyIpIH4gImNhc2UiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzdHVkaSIsICJzdHVkeSIsICJzdGFkeSIsICJzdGFkaSIpIH4gInN0dWR5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiaGF2ZW0iKSB+ICJoYXZlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiamVzIHNhdmUiKSB+ICJjb21lIHRvIGtub3ciLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzYXZlIGZpbmlzIikgfiAiYWxyZWFkeSBrbm93IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygidW5kZXJzdGFuZW0iLCAiYW50YXN0YW5lbSIpIH4gInVuZGVyc3RhbmQiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJubyB1bmRlcnN0YW5lbSIpIH4gImRvIG5vdCB1bmRlcnN0YW5kIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYWdyaSIpIH4gImFncmVlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiYXNrZW0iKSB+ICJhc2siLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJiaW4gaWRlbnRpZmkiKSB+ICJpZGVudGlmeSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoImRpc2NvdmVyZW0iLCAiZGlza2FyYXJlbSIpIH4gImRpc2NvdmVyIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygiZm9sZW1hcCIpIH4gImZvbGxvdyB1cCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInJpZWxhZXNtIiwgInJlYWxhZXNlbSIsICJyZWFsaXNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxpemVtIikgfiAicmVhbGl6ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIm5vIHJpZWxhZXNtIikgfiAiZGlkIG5vdCByZWFsaXplIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmFldGVtIiwgIndyaXRlbSIsICJyYWl0ZW0iLCAicml0ZW0iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmlyaXRpbmdidXQiKSB+ICJ3cml0ZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRyYWVtIikgfiAidHJ5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygid2F0Y2hlbSIsICJ3YXRjaG0iLCAid2FqZW0iKSB+ICJ3YXRjaCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInRpbmdzZSIsICJ0dW5nIHNlIikgfiAiZXhwcmVzcyBhbiBvcGluaW9uIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicmFvIikgfiAiYXJndWUiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJhbnNhIiwgImFuc2FyZW0iKSB+ICJhbnN3ZXIiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJqZWtlbSIpIH4gImNoZWNrIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygib2xzZW0iKSB+ICJhbGwtc2FtZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInNlcmNoZW0iKSB+ICJzZWFyY2giLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJzdWEiKSB+ICJiZSBzdXJlIiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicHJvbWVzIikgfiAicHJvbWlzZSIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoIndldCIpIH4gIndhaXQiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJrcmFlIikgfiAiY3J5IiwKICAgIHJlc3BvbnNlX2xlbW1hICVpbiUgYygicHJhZSIpIH4gInByYXkiLAogICAgcmVzcG9uc2VfbGVtbWEgJWluJSBjKCJyaW5nIikgfiAiY2FsbCIsCiAgICByZXNwb25zZV9sZW1tYSAlaW4lIGMoInVzZSB0byBzaGUgZmlsbCB0aGlzIHdheSIpIH4gImZlZWwiLCAKICAgIHJlc3BvbnNlX2xlbW1hID09ICJtZGF0YSIgfiBOQV9jaGFyYWN0ZXJfLAogICAgVFJVRSB+IHJlc3BvbnNlX2xlbW1hCiAgKSkgJT4lCiAgbXV0YXRlKHRoaW5rID0gaWZlbHNlKHJlc3BvbnNlX2xlbW1hMiAlaW4lIGMoInRoaW5rIiwgInRob3VnaHQiKSwgVCwgRiksCiAgICAgICAgIHRoaW5rWCA9IGlmZWxzZShncmVwbCgidGhpbmsiLCByZXNwb25zZV9sZW1tYTIpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoInRob3VnaHQiLCByZXNwb25zZV9sZW1tYTIpLCBULCBGKSkgJT4lCiAgbXV0YXRlKGJlbGlldmUgPSBpZmVsc2UocmVzcG9uc2VfbGVtbWEyICVpbiUgYygiYmVsaWV2ZSIsICJiZWxpZWYiKSwgVCwgRiksCiAgICAgICAgIGJlbGlldmVYID0gaWZlbHNlKGdyZXBsKCJiZWxpZSIsIHJlc3BvbnNlX2xlbW1hMiksIFQsIEYpKSAlPiUKICBtdXRhdGUocmVzcG9uc2VfY2F0MyA9IGNhc2Vfd2hlbih0aGluayA9PSBUIH4gInRoaW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxpZXZlID09IFQgfiAiYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlKSB+ICJvdGhlciByZXNwb25zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICByZXNwb25zZV9jYXQzID0gZmFjdG9yKHJlc3BvbnNlX2NhdDMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm90aGVyIHJlc3BvbnNlIiwgInRoaW5rIiwgImJlbGlldmUiKSksCiAgICAgICAgIHJlc3BvbnNlWF9jYXQzID0gY2FzZV93aGVuKHRoaW5rWCA9PSBUIH4gInRoaW5rKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbGlldmVYID09IFQgfiAiYmVsaWV2ZSoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2UpIH4gIm90aGVyIHJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICByZXNwb25zZVhfY2F0MyA9IGZhY3RvcihyZXNwb25zZVhfY2F0MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygib3RoZXIgcmVzcG9uc2UiLCAidGhpbmsqIiwgImJlbGlldmUqIikpLAogICAgICAgICByZXNwb25zZV9jYXQgPSByZWNvZGVfZmFjdG9yKGFzLmNoYXJhY3RlcihiZWxpZXZlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBTFNFIiA9ICJvdGhlciIsICJUUlVFIiA9ICJiZWxpZXZlIiksCiAgICAgICAgIHJlc3BvbnNlWF9jYXQgPSByZWNvZGVfZmFjdG9yKGFzLmNoYXJhY3RlcihiZWxpZXZlWCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFMU0UiID0gIm90aGVyIiwgIlRSVUUiID0gImJlbGlldmVYIikpICU+JQogIGxlZnRfam9pbihrZXkyICU+JSBzZWxlY3QoLXF1ZXN0aW9uKSAlPiUgcmVuYW1lKHF1ZXN0aW9uID0gdmFyX25hbWUpKQoKY29udHJhc3RzKGQyX2xvbmckdGhiMl9jdHJ5KSA9IGNvbnRyYXN0X2NvdW50cnkKIyBjb250cmFzdHMoZDJfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9jYXRlZ29yeQpjb250cmFzdHMoZDJfbG9uZyRjYXRlZ29yeSkgPSBjb250cmFzdF9jYXRlZ29yeV9vcnRoCmNvbnRyYXN0cyhkMl9sb25nJHN1cGVyX2NhdCkgPSBjb250cmFzdF9zdXBlcl9jYXQKYGBgCgpgYGB7cn0KIyBpbXBsZW1lbnQgZXhjbHVzaW9uIGNyaXRlcmlhIGFuZCByZW5hbWUgY291bnRyeSB2YXJpYWJsZQpkMiA8LSBkMiAlPiUgCiAgZmlsdGVyKHRoYjJfb3JkciA9PSAiWWVzIiwgdGhiMl9hdHRuID09ICJQYXNzIikgJT4lCiAgcmVuYW1lKGNvdW50cnkgPSB0aGIyX2N0cnkpCgpkMl9sb25nIDwtIGQyX2xvbmcgJT4lIAogIGZpbHRlcih0aGIyX29yZHIgPT0gIlllcyIsIHRoYjJfYXR0biA9PSAiUGFzcyIpICU+JQogIHJlbmFtZShjb3VudHJ5ID0gdGhiMl9jdHJ5KQpgYGAKCgojIE92ZXJ2aWV3CgpGcm9tIHRoZSBwcmVyZWdpc3RyYXRpb24gKFtsaW5rXShodHRwczovL2FzcHJlZGljdGVkLm9yZy9wNml5My5wZGYpKToKCj4gIk91ciBvdmVyYXJjaGluZyBoeXBvdGhlc2lzIGZvciB0aGUgcHJlc2VudCBzdHVkeSBpcyB0aGF0IFsuLi5dIG90aGVyIGxhbmd1YWdlcyB3aWxsIGhhdmUgYW4gZXBpc3RlbWljIHZlcmIgdGhhdCBpcyBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGZvciByZWxpZ2lvdXMgYXR0aXR1ZGUgcmVwb3J0cyAoc2ltaWxhciB0byBFbmdsaXNoIOKAnGJlbGlldmXigJ0pIGFuZCBhIGRpZmZlcmVudCBlcGlzdGVtaWMgdmVyYiB0aGF0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIG1hdHRlci1vZi1mYWN0IGF0dGl0dWRlIHJlcG9ydHMgKHNpbWlsYXIgdG8gRW5nbGlzaCDigJx0aGlua+KAnSkuIAo+IAo+IEZvciB0aGlzIHN0dWR5LCB3ZSBhcmUgZXhhbWluaW5nIGZpdmUgbGFuZ3VhZ2VzIGluIGZpdmUgcmVnaW9ucyBvZiBpbnRlcmVzdDogKGkpIE1hbmRhcmluIGluIENoaW5hOyAoaWkpIFRoYWkgaW4gVGhhaWxhbmQ7IChpaWkpIEJpc2xhbWEgKGFuIEVuZ2xpc2gtYmFzZWQgY3Jlb2xlCmxhbmd1YWdlKSBvbiB0aGUgTWVsYW5lc2lhbiBJc2xhbmQgb2YgVmFudWF0dTsgKGl2KSBGYW50ZSBpbiBHaGFuYTsgYW5kICh2KSBBbWVyaWNhbiBFbmdsaXNoIGluIHRoZSBCYXkgQXJlYSwgQ2FsaWZvcm5pYS4gCj4gCj4gV2UgdGh1cyBoYXZlIGZpdmUgbW9yZSBzcGVjaWZpYyBzdWItaHlwb3RoZXNlcy4gRm9yIGVhY2ggb2YgdGhlIGZpcnN0IGZvdXIgbGFuZ3VhZ2VzIC8gcmVnaW9ucyBvZiBpbnRlcmVzdCwgd2UgaHlwb3RoZXNpemUgdGhhdCBhIHNldCBvZiB3b3JkcyBvciBwaHJhc2VzIGV4aXN0cyB3aG9zZSB1c2FnZSBwYXJhbGxlbHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1c2FnZSBvZiDigJx0aGlua+KAnSBhbmQg4oCcYmVsaWV2ZeKAnSBpbiBBbWVyaWNhbiBFbmdsaXNoLCB3aXRoIG9uZSB3b3JkIG9yIHBocmFzZSAodGhlIOKAnHRoaW5r4oCdIGFuYWxvZ3VlKSBiZWluZyB1c2VkIGZvciBtb3JlIG1hdHRlci1vZi1mYWN0IGF0dGl0dWRlIHJlcG9ydHMgYW5kIHRoZSBvdGhlciAodGhlIOKAnGJlbGlldmXigJ0gYW5hbG9ndWUpIGJlaW5nIG1vcmUgbGlrZWx5IHRvIGJlIHVzZWQgZm9yIHJlbGlnaW91cyBhdHRpdHVkZSByZXBvcnRzLiBUaGF0IGdpdmVzIHVzIG91ciBmaXJzdCBmb3VyIHN1Yi1oeXBvdGhlc2VzOiB0aGF0IE1hbmRhcmluLCBUaGFpLCBCaXNsYW1hIGFuZCBGYW50ZSBzcGVha2VycyB3aWxsIGVhY2ggdXNlIHR3byBkaWZmZXJlbnQgd29yZHMgaW4gYSBtYW5uZXIgcGFyYWxsZWwgdG8gdGhlIHVzZSBvZgrigJx0aGlua+KAnSBhbmQg4oCcYmVsaWV2ZeKAnSBpbiBhbiBBbWVyaWNhbiBFbmdsaXNoIHNldHRpbmcgYXMgaWRlbnRpZmllZCBieSBIZWlwaGV0eiwgTGFuZGVycywgYW5kIFZhbiBMZWV1d2VuLiBPdXIgZmlmdGggc3ViLWh5cG90aGVzaXMgaXMgdGhhdCB0aGUgQmF5IEFyZWEgcG9ydGlvbiBvZiB0aGUgc3R1ZHkgd2lsbCByZXBsaWNhdGUgdGhlIHJlc3VsdHMgb2YgdGhlIGVhcmxpZXIgc3R1ZHkgb2YgSGVpcGhldHosIExhbmRlcnMsIGFuZCBWYW4gTGVldXdlbi4iCgoKPHAgc3R5bGU9ImNvbG9yOmRhcmtyZWQiPioqS1cgRVhFQ1VUSVZFIFNVTU1BUlkgKDIwMjAtMDEtMjApOiBXZSByZXBsaWNhdGVkIHRoZSBvcmlnaW5hbCBmaW5kaW5nIGluIHRoZSBVUyAoYW5kIHRoZSBmaW5kaW5ncyBvZiBUaGluayBCZWxpZXZlIDEpOiBwYXJ0aWNpcGFudHMgd2VyZSBtb3JlIGxpa2VseSB0byB3cml0ZSBpbiAiYmVsaWV2ZSIgZm9yIHJlbGlnaW91cyB0aGFuIGZhY3QgcXVlc3Rpb25zLiBXZSBmb3VuZCB0aGUgc2FtZSBwYXR0ZXJuIGluIGFsbCBmaXZlIGNvdW50cmllcy9sYW5nYXVnZXMgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeS4qKjwvcD4KCjxwIHN0eWxlPSJjb2xvcjpkYXJrcmVkIj4qKkFzIGluIFRoaW5rIEJlbGlldmUgMSwgdGhlIHBhdHRlcm4gd2FzIHNvbWV3aGF0IHdlYWtlciBpbiBHaGFuYS9GYW50ZSB0aGFuIGluIG90aGVyIGNvdW50cmllcy9sYW5ndWFnZXMuIEluIFRoaW5rIEJlbGlldmUgMSwgdGhlIHBhdHRlcm4gd2FzIHN0cm9uZ2VyIGluIFRoYWlsYW5kL1RoYWkgKGFuZCBubyBzdHJvbmdlciBvciB3ZWFrZXIgaW4gQ2hpbmEvTWFuZGFyaW4gb3IgVmFudWF0dS9CaXNsYW1hKTsgaW4gY29udHJhc3QsIGluIHRoaXMgc3R1ZHkgaXQgd2FzIHN0cm9uZ2VyIGluIENoaW5hL01hbmRhcmluLCB3ZWFrZXIgaW4gVmFudWF0dS9CaXNsYW1hLCBhbmQgbm8gc3Ryb25nZXIgb3Igd2Vha2VyIFRoYWlsYW5kL1RoYWkuIEkgc3VzcGVjdCB0aGVzZSBwYXR0ZXJucyBhcmUgbGFyZ2VseSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBmYWN0IHRoYXQgc28gZmV3IHBhcnRpY2lwYW50cyBpbiBHaGFuYSBhbmQgZXNwZWNpYWxseSBWYW51YXR1IHNwb250YW5lb3VzbHkgdXNlZCB0aGUgd29yZCAiYmVsaWV2ZSIgaW4gdGhlaXIgZnJlZSByZXNwb25zZXMuKio8L3A+CgoKIyBTYW1wbGVzCgpCZWZvcmUgd2UgYmVnaW4sIGl0J3MgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSBoYWQgdW5lcXVhbCBzYW1wbGUgc2l6ZXMgYnkgY291bnRyeToKCmBgYHtyfQpkMl9yYXcgJT4lIGNvdW50KHRoYjJfY3RyeSkKYGBgCgpIb3dldmVyLCBgciBkMl9yYXcgJT4lIGZpbHRlcih0aGIyX29yZHIgPT0gIk5vIikgJT4lIGNvdW50KCkgJT4lIGFzLm51bWVyaWMoKWAgcGFydGljaXBhbnRzIGNvbXBsZXRlZCB0aGlzIHRhc2sgYWZ0ZXIgY29tcGxldGluZyBvdGhlciBzdXJ2ZXlzLCBhbmQgYW4gYWRkaXRpb25hbCBgciBkMl9yYXcgJT4lIGZpbHRlcih0aGIyX29yZHIgPT0gIlllcyIsIHRoYjJfYXR0biA9PSAiRmFpbCIpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKClgIGZhaWxlZCB0aGUgYXR0ZW50aW9uIGNoZWNrLiBJbiB0aGUgZm9sbG93aW5nIGFuYWx5c2VzIEkgd2lsbCBleGNsdWRlIHRoZXNlIHBhcnRpY2lwYW50cywgbGVhdmluZyB1cyB3aXRoIHRoZSBmb2xsb3dpbmcgc2FtcGxlczoKCmBgYHtyfQpkMiAlPiUgY291bnQoY291bnRyeSkKYGBgCgpgYGB7cn0Kc2FtcGxlX3NpemVfZDIgPC0gZDIgJT4lIAogIGNvdW50KGNvdW50cnkpICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lCiAgbXV0YXRlKGNvdW50cnlfbiA9IHBhc3RlMChjb3VudHJ5LCAiIChuPSIsIG4sICIpIiksCiAgICAgICAgIGNvdW50cnlfbiA9IHJlb3JkZXIoY291bnRyeV9uLCBhcy5udW1lcmljKGNvdW50cnkpKSkKYGBgCgoKIyBQbG90cwoKV2UnbGwgYmVnaW4gYnkgcGxvdHRpbmcgcmVzcG9uc2VzIG9mICJ0aGluayhzKS90aG91Z2h0IiAocmVkKSB2cy4gImJlbGlldmUocykvYmVsaWV2ZWQiICh0dXJxdW9pc2UpIHZzLiBvdGhlciByZXNwb25zZXMgKGdyYXkpIHRvIGdldCBhbiBvdmVyYWxsIHNlbnNlIG9mIGFueSBwYXR0ZXJucyBpbiB0aGUgZGF0YS4KCmBgYHtyfQp0aHJlZV9jb2xzIDwtIGMoImdyYXkiLCBnZ19jb2xvcl9odWUoMikpCmBgYAoKIyMgQnkgc3VwZXJvcmRpbmF0ZSBjYXRlZ29yeQoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjV9CmQyX2xvbmcgJT4lCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICAjIGdncGxvdChhZXMoeCA9IHN1cGVyX2NhdCwgZmlsbCA9IHJlc3BvbnNlX2NhdDMpKSArCiAgZ2dwbG90KGFlcyh4ID0gc3VwZXJfY2F0LCBmaWxsID0gcmVzcG9uc2VYX2NhdDMpKSArICMgaW5jbHVkZXMgImRvZXMgbm90IFgiLCAiW2FkdmVyYl0gWCIKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5X24sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gdGhyZWVfY29scykgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJjYXRlZ29yeSIsIHkgPSAicHJvcG9ydGlvbiIsIGZpbGwgPSAicmVzcG9uc2UiKQpgYGAKCiMjIEJ5IGNhdGVnb3J5CgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KZDJfbG9uZyAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogICMgZ2dwbG90KGFlcyh4ID0gY2F0ZWdvcnksIGZpbGwgPSByZXNwb25zZV9jYXQzKSkgKwogIGdncGxvdChhZXMoeCA9IGNhdGVnb3J5LCBmaWxsID0gcmVzcG9uc2VYX2NhdDMpKSArICMgaW5jbHVkZXMgImRvZXMgbm90IFgiLCAiW2FkdmVyYl0gWCIKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5X24sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWxwaGEgPSAwLjcsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMSkgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gdGhyZWVfY29scykgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJjYXRlZ29yeSIsIHkgPSAicHJvcG9ydGlvbiIsIGZpbGwgPSAicmVzcG9uc2UiKQpgYGAKCiMjIEJ5IHF1ZXN0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuN30KZDJfbG9uZyAlPiUKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogICMgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihzdHJfd3JhcChxdWVzdGlvbl90ZXh0X3Nob3J0LCA0MCksIG9yZGVyKSwgCiAgIyAgICAgICAgICAgIGZpbGwgPSByZXNwb25zZV9jYXQzKSkgKwogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoc3RyX3dyYXAocXVlc3Rpb25fdGV4dF9zaG9ydCwgNDApLCBvcmRlciksIAogICAgICAgICAgICAgZmlsbCA9IHJlc3BvbnNlWF9jYXQzKSkgKyAjIGluY2x1ZGVzICJkb2VzIG5vdCBYIiwgIlthZHZlcmJdIFgiCiAgZmFjZXRfZ3JpZChjb3VudHJ5X24gfiBjYXRlZ29yeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhbHBoYSA9IDAuNywgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4xKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSB0aHJlZV9jb2xzKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiLAogICAgICAgIHBsb3QubWFyZ2luID0gKHVuaXQoYygwLjIsIDAuMiwgMC4yLCAxLjgpLCAiY20iKSkpICsKICBsYWJzKHggPSAiY2F0ZWdvcnkiLCB5ID0gInByb3BvcnRpb24iLCBmaWxsID0gInJlc3BvbnNlIikKYGBgCgoKIyBBbmFseXNpczogS1cgd2l0aG91dCBsb29raW5nIGF0IHByZXJlZ2lzdHJhdGlvbgoKVGhlc2UgYW5hbHlzZXMgZGlyZWN0bHkgcGFyYWxsZWwgdGhlIHdheSBJIGFuYWx5emVkIHRoZSBUaGluayBCZWxpZXZlIDEgZGF0YSBiZWZvcmUgbG9va2luZyBhdCB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBZ2FpbiwgSSB0aGluayB0aGVzZSBhbmFseXNlcyBhcmUgdmFsdWFibGUgYmVjYXVzZSB0aGV5J3JlIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMgLS0gbm8gbmVlZCBmb3IgZm9sbG93LXVwIHRlc3RzIC0tIGFuZCB0aGV5IGRpcmVjdGx5IHRlc3QgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgdGhlIGVmZmVjdCBvZiBpbnRlcmVzdCB2YXJpZXMgYWNyb3NzIGNvdW50cmllcy9sYW5nYXVnZXMuCgpBcyBvZiAyMDIwLTAxLTIyLCBJJ20gbm93IHVzaW5nIHRoZSBtb3JlIGxlbmllbnQgImJlbGlldmVcKiIgdmFyaWFibGUgaW4gdGhlc2UgYW5hbHlzZXMuCgpUZWNobmljYWwgbm90ZTogVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UsIGFsbCBvZiB0aGVzZSBhbmFseXNlcyB1c2UgImVmZmVjdCBjb2RpbmciIGZvciBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgKGUuZy4sIGNvdW50cnksIGNhdGVnb3J5IG9mIHF1ZXN0aW9uKSAtLSBtZWFuaW5nIHRoYXQgZWFjaCBjb3VudHJ5L2xhbmdhdWdlIGlzIGNvbXBhcmVkIHRvIHRoZSAiZ3JhbmQgbWVhbiIgY29sbGFwc2luZyBhY3Jvc3MgYWxsIGNvdW50cmllcy9sYW5ndWFnZXMuIEJlY2F1c2Ugb2YgZGVncmVlcyBvZiBmcmVlZG9tIGlzc3VlcywgZWFjaCBhbmFseXNpcyBvbmx5IGNvbXBhcmVzIDQgb2YgdGhlIDUgY291bnRyaWVzIHRvIHRoZSBncmFuZCBtZWFuIC0tIGJ5IGRlZmF1bHQsIEkndmUgbGVmdCBvdXQgdGhlIGNvbXBhcmlzb24gb2YgdGhlIFVTL0VuZ2xpc2ggdG8gdGhlIGdyYW5kIG1lYW4sIGJ1dCBzdGF0cyBmb3IgdGhhdCBjb21wYXJpc29uIGNvdWxkIGVhc2lseSBiZSBjYWxjdWxhdGVkIChpZiB3ZSBsZWZ0IG91dCBhbm90aGVyIGNvdW50cnkvbGFuZ3VhZ2UgaW5zdGVhZCkuIFRoaXMgaXMganVzdCB0byBzYXkgdGhhdCB5b3Ugd29uJ3Qgc2VlIHN0YXRlbWVudHMgbGlrZSAiVGhlIGVmZmVjdCB3YXMgZXhhZ2dlcmF0ZWQgaW4gdGhlIFVTIHJlbGF0aXZlIHRvIG90aGVyIGNvdW50cmllcywiIGFsdGhvdWdoIHRoZXkgbWlnaHQgYmUgdHJ1ZS4KCiMjIEtXIEFuYWx5c2lzICMxCgpGaXJzdCwgSSB1c2VkIGEgbWl4ZWQgZWZmZWN0cyBsb2dpc3RpYyByZWdyZXNzaW9uIHByZWRpY3RpbmcgaG93IGxpa2VseSBhIHBhcnRpY2lwYW50IHdhcyB0byB3cml0ZSAiYmVsaWV2ZSIgYmFzZWQgb24gdGhlIHN1cGVyb3JkaW5hdGUgY2F0ZWdvcnkgb2YgdGhlIHF1ZXN0aW9uICgicmVsaWdpb3VzIiBxdWVzdGlvbnMgb3IgImZhY3QiIHF1ZXN0aW9ucyksIHRoZSBjb3VudHJ5IHRoZXkgd2VyZSBpbi9sYW5ndWFnZSB0aGV5IHdlcmUgdXNpbmcgKFVTL0VuZ2xpc2gsIEdoYW5hL0ZhbnRlLCBUaGFpbGFuZC9UaGFpLCBDaGluYS9NYW5kYXJpbiwgb3IgVmFudWF0dS9CaXNsYW1hKSwgYW5kIGFuIGludGVyYWN0aW9uIGJldHdlZW4gdGhlbSwgd2l0aCBhIG1heGltYWwgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlIChyYW5kb20gaW50ZXJwY2VwdHMgYW5kIHNsb3BlcyBieSBzdWJqZWN0LCBhbmQgcmFuZG9tIGludGVyY2VwdHMgYnkgcXVlc3Rpb24pLiBUaGlzIGFuYWx5c2lzIGdpdmVzIG1lIGEgc2Vuc2Ugb2YgKDEpIFdoZXRoZXIgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciByZWxpZ2lvdXMgcXVlc3Rpb25zIHRoYW4gZmFjdCBxdWVzdGlvbnMsIGFuZCB3aGV0aGVyIHRoaXMgdGVuZGVuY3kgdmFyaWVkIGJ5IGNvdW50cnkvbGFuZ3VhZ2UsIGNvbnRyb2xsaW5nIGZvciB0aGUgZmFjdCB0aGF0IHRoZSBvdmVyYWxsIHJhdGVzIG9mIGNpcmNsaW5nICJiZWxpZXZlIiBtaWdodCB2YXJ5IGJ5IGNvdW50cnkvbGFuZ3VhZ2UgKGFuZCBhY2NvdW50aW5nIGZvciBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGFuZCBkaWZmZXJlbmNlcyBhY3Jvc3MgaW5kaXZpZHVhbCBxdWVzdGlvbnMpLgoKTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgdHJlYXRzIHJlc3BvbnNlcyBvZiAidGhpbmsiIGFzIHRoZSBzYW1lIGFzIGFueSBvdGhlciBub24tImJlbGlldmUiIHJlc3BvbnNlIC0tIEknbSBqdXN0IHRyeWluZyB0byBwcmVkaWN0IGhvdyBsaWtleSB0aGUgcGFydGljaXBhbnQgd2FzIHRvIHdyaXRlIGluICJiZWxpZXZlLiIKCmBgYHtyLCBlY2hvID0gVH0KcjIuMSA8LSBsbWVyKGJlbGlldmVYIH4gc3VwZXJfY2F0ICogY291bnRyeSAKICAgICAgICAgICAgICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksIAogICAgICAgICAgICAgIyArICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgCiAgICAgICAgICAgICBkYXRhID0gZDJfbG9uZykKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMi4xLCBzdGRfYmV0YSA9IFQpICU+JSByZWd0YWJfc3R5bGVfZnVuKHJvd19lbXBoID0gYygyLCA3OjEwKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJlZ3RhYl9yYW5fZnVuKHIyLjEsIHN1YmpfdmFyID0gInRoYjJfc3ViaiIpICU+JSByZWd0YWJfc3R5bGVfZnVuKCkKYGBgCgpUaGUgZWZmZWN0cyBvZiBwcmltYXJ5IGludGVyZXN0IGFyZSBpbiBib2xkOgoKLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpKio6IENvbGxhcHNpbmcgYWNyb3NzIGNvdW50cmllcy9sYW5ndWFnZXMsIHBhcnRpY2lwYW50cyB3ZXJlIGluZGVlZCBtb3JlIGxpa2VseSB0byBzYXkgImJlbGlldmUiIGZvciAicmVsaWdpb3VzIiBxdWVzdGlvbnMsIGVjaG9pbmcgdGhlIGZvcmNlZCBjaG9pY2UgcmVzdWx0cyBvZiBUaGluayBCZWxpZXZlIDEuCi0gQ291bnRyeSAoR2guKTogUGFydGljaXBhbnRzIGluIEdoYW5hIHdlcmUgZ2VuZXJhbGx5IGxlc3MgbGlrZWx5IHRoYW4gb3RoZXIgcGFydGljaXBhbnRzIHRvIHNheSAiYmVsaWV2ZSwiIGNvbGxhcHNpbmcgYWNyb3NzIHF1ZXN0aW9uIGNhdGVnb3JpZXMuIChUaGlzIGlzIGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggdGhleSB3ZXJlIG1vcmUgbGlrZWx5IHRvIGNpcmNsZSAiYmVsaWV2ZS4iKQotIENvdW50cnkgKFRoLik6IFBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCB3ZXJlIG5vIG1vcmUgb3IgbGVzcyBsaWtlbHkgdGhhbiBvdGhlciBwYXJ0aWNpcGFudHMgdG8gc2F5ICJiZWxpZXZlLCIgY29sbGFwc2luZyBhY3Jvc3MgcXVlc3Rpb24gY2F0ZWdvcmllcy4gKFRoaXMgaXMgaW4gY29udHJhc3QgdG8gVGhpbmsgQmVsaWV2ZSAxLCBpbiB3aGljaCB0aGV5IHdlcmUgbGVzcyBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlLiIpCi0gQ291bnRyeSAoQ2guKTogUGFydGljaXBhbnRzIGluIENoaW5hIHdlcmUgbm8gbW9yZSBvciBsZXNzIGxpa2VseSB0aGFuIG90aGVyIHBhcnRpY2lwYW50cyB0byBzYXkgImJlbGlldmUsIiBjYW9sbGFwc2luZyBhY3Jvc3MgcXVlc3Rpb24gY2F0ZWdvcmllcy4gKFRoZXkgZGlkIG5vdCBkaWZmZXIgZnJvbSB0aGUgZ3JhbmQgbWVhbiBpbiBUaGluayBCZWxpZXZlIDEuKQotIENvdW50cnkgKFZ0Lik6IFBhcnRpY2lwYW50cyBpbiBWYW51YXR1IHdlcmUgbm8gbW9yZSBvciBsZXNzIGxpa2VseSB0aGFuIG90aGVyIHBhcnRpY2lwYW50cyB0byBzYXkgImJlbGlldmUsIiBjb2xsYXBzaW5nIGFjcm9zcyBxdWVzdGlvbiBjYXRlZ29yaWVzLiAoVGhleSBkaWQgbm90IGRpZmZlciBmcm9tIHRoZSBncmFuZCBtZWFuIGluIFRoaW5rIEJlbGlldmUgMS4pCi0gKipDYXRlZ29yeSAocmVsaWdpb3VzKSB4IENvdW50cnkgKEdoLikqKjogVGhlIGRpZmZlcmVuY2UgaW4gcmF0ZXMgb2YgImJlbGlldmUiIHJlc3BvbnNlcyBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNtYWxsZXIgaW4gR2hhbmEgdGhhbiBpbiBvdGhlciBjb3VudHJpZXMsIGVjaG9pbmcgdGhlIGZvcmNlZCBjaG9pY2UgcmVzdWx0cyBvZiBUaGluayBCZWxpZXZlIDEuIAotICoqQ2F0ZWdvcnkgKHJlbGlnaW91cykgeCBDb3VudHJ5IChUaC4pKio6IFRoZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiByZXNwb25zZXMgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yaWVzIHdhcyBubyBzbWFsbGVyIG9yIGxhcmdlciBpbiBUaGFpbGFuZCB0aGFuIGluIG90aGVyIGNvdW50cmllcy4gKEluIFRoaW5rIEJlbGlldmUgMSwgdGhlIGRpZmZlcmVuY2Ugd2FzIGV4YWdnZXJhdGVkIGluIFRoYWlsYW5kLikKLSAqKkNhdGVnb3J5IChyZWxpZ2lvdXMpIHggQ291bnRyeSAoQ2guKSoqOiBUaGUgZGlmZmVyZW5jZSBpbiByYXRlcyBvZiAiYmVsaWV2ZSIgcmVzcG9uc2VzIGJldHdlZW4gcXVlc3Rpb24gY2F0ZWdvcmllcyB3YXMgbGFyZ2VyIGluIENoaW5hIHRoYW4gaW4gb3RoZXIgY291bnRyaWVzLiAoSW4gVGhpbmsgQmVsaWV2ZSAxLCB0aGlzIGRpZmZlcmVuY2UgZGlkIG5vdCBkaWZmZXIgZnJvbSB0aGUgZGlmZmVyZW5jZSBpbiBvdGhlciBjb3VudHJpZXMuKQotICoqQ2F0ZWdvcnkgKHJlbGlnaW91cykgeCBDb3VudHJ5IChWdC4pKio6IFRoZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiByZXNwb25zZXMgYmV0d2VlbiBxdWVzdGlvbiBjYXRlZ29yaWVzIHdhcyBzbWFsbGVyIGluIFZhbnVhdHUgdGhhbiBpbiBvdGhlciBjb3VudHJpZXMuIChJbiBUaGluayBCZWxpZXZlIDEsIHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IGRpZmZlciBmcm9tIHRoZSBkaWZmZXJlbmNlIGluIG90aGVyIGNvdW50cmllcy4pCgoqKlRha2UtYXdheTogVGhlIHByZWRpY3RlZCBlZmZlY3QgaXMgZXZpZGVudCBpbiB0aGlzIGRhdGFzZXQsIGFzIGl0IHdhcyBpbiBUaGluayBCZWxpZXZlIDEuIEl0IGFwcGVhcnMgdG8gYmUgZXhhZ2dlcmF0ZWQgaW4gQ2hpbmEgYW5kIGRpbWluaXNoZWQgaW4gR2hhbmEgYW5kIFZhbnVhdHUsIGEgcGF0dGVybiB3aGljaCBkaWZmZXJzIGZyb20gVGhpbmsgQmVsaWV2ZSAxLioqCgojIyBLVyBBbmFseXNlcyAjMWEtMWUgKGJ5IGNvdW50cnkpCgpOZXh0LCBJIGRpZCB0aGlzIHNhbWUgYW5hbHlzaXMgd2l0aGluIGVhY2ggY291bnRyeS9sYW5nYXVnZSBhbG9uZSAodXNpbmcgdGhlIG1vc3QgbWF4aW1hbCByYW5kb20gZWZmZWN0IHN0cnVjdHVyZSB0aGF0IGNvbnZlcmdlZCBhY3Jvc3MgYWxsIGNvdW50cmllcy9sYW5ndWFnZXMpLiAKCmBgYHtyLCBlY2hvID0gVH0KIyBub3RlOiB1c2luZyBtb3N0IG1heGltYWwgY29tbW9uIHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZQpyMi4xX3VzIDwtIGxtZXIoYmVsaWV2ZVggfiBzdXBlcl9jYXQgKyAKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICMgKDEgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgICAgIyAoMSArIHN1cGVyX2NhdCB8fCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVVMiKSkKCnIyLjFfZ2ggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiR2hhbmEiKSkKCnIyLjFfdGggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICAgKDEgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICAgICAgICMgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVGhhaWxhbmQiKSkKCnIyLjFfY2ggPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiQ2hpbmEiKSkKCnIyLjFfdnQgPC0gbG1lcihiZWxpZXZlWCB+IHN1cGVyX2NhdCArIAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgIyAoMSB8IHRoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwKICAgICAgICAgICAgICAgICAgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopLAogICAgICAgICAgICAgICAgICAjICgxICsgc3VwZXJfY2F0IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgICAgICAjICgxIHwgdGhiMl9zdWJqKSwKICAgICAgICAgICAgICAgIGRhdGEgPSBkMl9sb25nICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyfQpiaW5kX3Jvd3MocmVndGFiX2Z1bihyMi4xX3VzKSAlPiUgbXV0YXRlKENvdW50cnkgPSAiVVMiKSwKICAgICAgICAgIHJlZ3RhYl9mdW4ocjIuMV9naCkgJT4lIG11dGF0ZShDb3VudHJ5ID0gIkdoYW5hIiksCiAgICAgICAgICByZWd0YWJfZnVuKHIyLjFfdGgpICU+JSBtdXRhdGUoQ291bnRyeSA9ICJUaGFpbGFuZCIpLAogICAgICAgICAgcmVndGFiX2Z1bihyMi4xX2NoKSAlPiUgbXV0YXRlKENvdW50cnkgPSAiQ2hpbmEiKSwKICAgICAgICAgIHJlZ3RhYl9mdW4ocjIuMV92dCkgJT4lIG11dGF0ZShDb3VudHJ5ID0gIlZhbnVhdHUiKSkgJT4lCiAgc2VsZWN0KENvdW50cnksIGV2ZXJ5dGhpbmcoKSkgJT4lCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IHNlcSgyLCAxMCwgMikpICU+JQogIGNvbGxhcHNlX3Jvd3MoMSkKYGBgCgpUaGUgZWZmZWN0cyBvZiBwcmltYXJ5IGludGVyZXN0IGFyZSBpbiBib2xkLCBhbmQgKip0aGUgdGFrZS1hd2F5IGlzIGNsZWFyOiBJbiBldmVyeSBjb3VudHJ5L2xhbmd1YWdlLCBwYXJ0aWNpcGFudHMgd2VyZSBtb3JlIGxpa2VseSB0byBzYXkgImJlbGlldmUiIGluICJyZWxpZ2lvdXMiIHF1ZXN0aW9ucyB0aGFuIGluICJmYWN0IiBxdWVzdGlvbnMqKi4KCgojIyBLVyBBbmFseXNpcyAjMgoKSW4gdGhpcyBhbmFseXNpcywgSSB0cmVhdGVkIGNvdW50cnkvbGFuZ3VhZ2UgYXMgYSByYW5kb20gcmF0aGVyIHRoYW4gZml4ZWQgZWZmZWN0ICh3aXRoIHBhcnRpY2lwYW50cyBuZXN0ZWQgd2l0aGluIGNvdW50cmllcykuIAoKYGBge3IsIGVjaG8gPSBUfQpyMi4yIDwtIGxtZXIoYmVsaWV2ZVggfiBzdXBlcl9jYXQgCiAgICAgICAgICAgICAjICsgKDEgKyBzdXBlcl9jYXQgfCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8IGNvdW50cnkvdGhiMl9zdWJqKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICMgKyAoMSArIHN1cGVyX2NhdCB8fCBjb3VudHJ5L3RoYjJfc3ViaiksICMgZmFpbGVkIHRvIGNvbnZlcmdlCiAgICAgICAgICAgICAjICsgKDEgfCBjb3VudHJ5L3RoYjJfc3ViaikgKyAoMSB8IHF1ZXN0aW9uKSwgIyBmYWlsZWQgdG8gY29udmVyZ2UKICAgICAgICAgICAgICsgKDEgfCBjb3VudHJ5L3RoYjJfc3ViaiksIAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjIuMikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSAyKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmVndGFiX3Jhbl9mdW4ocjIuMiwgc3Vial92YXIgPSAidGhiMl9zdWJqIikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4oKQpgYGAKClRoZSBlZmZlY3Qgc3RpbGwgaG9sZHMuCgojIyBLVyBBbmFseXNpcyAjMwoKRmluYWxseSwgSSByYW4gYSB2ZXJzaW9uIG9mIHRoaXMgZmlyc3QgbW9kZWwgbG9va2luZyBhdCA1IGNhdGVnb3JpZXMgb2YgcXVlc3Rpb25zIChyYXRoZXIgdGhhbiAyIHN1cGVyb3JkaW5hdGUgY2F0ZWdvcmllcyk6IENocmlzdGlhbiByZWxpZ2lvdXMsIEJ1ZGRoaXN0IHJlbGlnaW91cywgd2VsbC1rbm93biBmYWN0LCBlc290ZXJpYyBmYWN0LCBhbmQgcGVyc29uYWwgZmFjdC4gSSBjb21wYXJlZCB0aGVzZSBjYXRlZ29yaWVzIHVzaW5nIHBsYW5uZWQgb3J0aG9nb25hbCBjb250cmFzdHMuIAoKYGBge3IsIGVjaG8gPSBUfQpyMi4zIDwtIGxtZXIoYmVsaWV2ZVggfiBjYXRlZ29yeSAqIGNvdW50cnkgCiAgICAgICAgICAgICArICgxICsgY2F0ZWdvcnkgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksIAogICAgICAgICAgICAgIyArICgxICsgY2F0ZWdvcnkgfHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgIyArICgxICsgY2F0ZWdvcnkgfCB0aGIyX3N1YmopLCAKICAgICAgICAgICAgICMgKyAoMSArIGNhdGVnb3J5IHx8IHRoYjJfc3ViaiksIAogICAgICAgICAgICAgIyArICgxIHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcpCmBgYAoKYGBge3J9CnJlZ3RhYl9mdW4ocjIuMywgCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAiY2F0ZWdvcnlfcmVsaWdfZmFjdCIsIAogICAgICAgICAgIHByZWRpY3Rvcl9uYW1lMSA9ICJDYXRlZ29yeSAoUmVsaWdpb3VzIHZzLiBmYWN0KSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjIgPSAiY2F0ZWdvcnlfcmVsaWdfQ19CIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTIgPSAiQ2F0ZWdvcnkgKENocmlzdGlhbiB2cy4gQnVkZGhpc3QgcmVsaWdpb3VzKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjMgPSAiY2F0ZWdvcnlfZmFjdF9XRV9MIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTMgPSAiQ2F0ZWdvcnkgKHdlbGwta25vd24gJiBlc290ZXJpYyB2cy4gcGVyc29uYWwgZmFjdCkiLAogICAgICAgICAgIHByZWRpY3Rvcl92YXI0ID0gImNhdGVnb3J5X2ZhY3RfV19FIiwKICAgICAgICAgICBwcmVkaWN0b3JfbmFtZTQgPSAiQ2F0ZWdvcnkgKHdlbGwta25vd24gdnMuIGVzb3RlcmljIGZhY3QpIikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDI6NSwgMTA6MjUpKSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmNlcHQiLCBzdGFydF9yb3cgPSAxLCBlbmRfcm93ID0gMSkgJT4lCiAgZ3JvdXBfcm93cygiQ2F0ZWdvcnkgY29tcGFyaXNvbnMiLCBzdGFydF9yb3cgPSAyLCBlbmRfcm93ID0gNSkgJT4lCiAgZ3JvdXBfcm93cygiQ291bnRyeSBjb21wYXJpc29ucyIsIHN0YXJ0X3JvdyA9IDYsIGVuZF9yb3cgPSA5KSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmFjdGlvbnM6IEdoYW5hIiwgc3RhcnRfcm93ID0gMTAsIGVuZF9yb3cgPSAxMykgJT4lCiAgZ3JvdXBfcm93cygiSW50ZXJhY3Rpb25zOiBUaGFpbGFuZCIsIHN0YXJ0X3JvdyA9IDE0LCBlbmRfcm93ID0gMTcpICU+JQogIGdyb3VwX3Jvd3MoIkludGVyYWN0aW9uczogQ2hpbmEiLCBzdGFydF9yb3cgPSAxOCwgZW5kX3JvdyA9IDIxKSAlPiUKICBncm91cF9yb3dzKCJJbnRlcmFjdGlvbnM6IFZhbnVhdHUiLCBzdGFydF9yb3cgPSAyMiwgZW5kX3JvdyA9IDI1KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmVndGFiX3Jhbl9mdW4ocjIuMywgc3Vial92YXIgPSAidGhiMl9zdWJqIikgJT4lIHJlZ3RhYl9zdHlsZV9mdW4oKQpgYGAKClRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IGNvbXBhcmVkIHRoZSB0d28gInJlbGlnaW91cyIgY2F0ZWdvcmllcyB0byB0aGUgdGhyZWUgImZhY3QiIGNhdGVnb3JpZXMgKCJDYXRlZ29yeSAoUmVsaWdvaXVzIHZzLiBmYWN0KSIpLiBUaGlzIHBhcmFsbGVscyB0aGUgcHJldmlvdXMgYW5hbHlzZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgc2ltaWxhcjogT3ZlcmFsbCwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciByZWxpZ2lvdXMgcXVlc3Rpb25zIHRoYW4gZmFjdCBxdWVzdGlvbnMsIGFuZCB0aGlzIHRlbmRlbmN5IHdhcyBkaW1pbmlzaGVkIGluIEdoYW5hIGFuZCBWYW51YXR1LCBhbmQgZXhhZ2dlcmF0ZWQgaW4gQ2hpbmEuCgpUaGUgc2Vjb25kIG9ydGhvZ29uYWwgY29udHJhc3QgY29tcGFyZWQgQ2hyaXN0aWFuIHRvIEJ1ZGRoaXN0ICJyZWxpZ2lvdXMiIHF1ZXN0aW9ucy4gT3ZlcmFsbCwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gd3JpdGUgImJlbGlldmUiIGZvciBDaHJpc3RpYW4gcXVlc3Rpb25zLCBhbmQgdGhpcyB0ZW5kZW5jeSB3YXMgZXhhZ2dlcmF0ZWQgaW4gVmFudWF0dSBhbmQgZGltaW5pc2hlZCBpbiBUaGFpbGFuZCAocGFydGlhbGx5IGVjaG9pbmcgVGhpbmsgQmVsaWV2ZSAxKS4KClRoZSB0aGlyZCBvcnRob2dvbmFsIGNvbnRyYXN0IGNvbXBhcmVkIHdlbGwta25vd24gYW5kIGVzb3RlcmljIGZhY3RzLCBvbiB0aGUgb25lIGhhbmQsIHRvIHBlcnNvbmFsIGZhY3RzLCBvbiB0aGUgb3RoZXIuIE92ZXJhbGwsIHRoZXJlIHdhcyBubyByZWxpYWJsZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiBiZXR3ZWVuIHRoZXNlIGdyb3VwcyBvZiBxdWVzdGlvbnMgKGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlIiBmb3Igd2VsbC1rbm93biBhbmQgZXNvdGVyaWMgZmFjdHMpLiBUaGlzIGRpZmZlcmVuY2UgZGlkIG5vdCB2YXJ5IGJ5IGNvdW50cnkuCgpUaGUgZm91cnRoIG9ydGhvZ29uYWwgY29udHJhc3QgY29tcGFyZWQgd2VsbC1rbm93biB0byBlc290ZXJpYyBmYWN0cy4gIE92ZXJhbGwsIHRoZXJlIHdhcyBubyByZWxpYWJsZSBkaWZmZXJlbmNlIGluIHJhdGVzIG9mICJiZWxpZXZlIiBiZXR3ZWVuIHRoZXNlIGdyb3VwcyBvZiBxdWVzdGlvbnMgKGluIGNvbnRyYXN0IHRvIFRoaW5rIEJlbGlldmUgMSwgaW4gd2hpY2ggcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gY2lyY2xlICJiZWxpZXZlIiBmb3Igd2VsbC1rbm93biBmYWN0cykuIFRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgYnkgY291bnRyeS4KCk5vdGUgdGhhdCB0aGVzZSBmaW5kaW5ncyBzdGF0aXN0aWNhbGx5IGNvbnRyb2wgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBzYW1wbGVzIGluIHRoZSBvdmVyYWxsIHJhdGUgb2Ygd3JpdGluZyAiYmVsaWV2ZSIgKHdoaWNoIHdhcyBnZW5lcmFsbHkgbG93ZXIgaW4gR2hhbmEpLgoKCiMgQW5hbHlzaXM6IEJhc2VkIG9uIHByZXJlZ2lzdHJhdGlvbgoKRnJvbSBwcmVyZWdpc3RyYXRpb246Cgo+ICJTdXJ2ZXkgMTogV2Ugd2lsbCBjb25kdWN0IGEgNSAoU2l0ZTogQ2hpbmEgdnMuIFRoYWlsYW5kIHZzLiBWYW51YXR1IHZzLiBHaGFuYSB2cy4gVW5pdGVkIFN0YXRlcykgeCAyIChTdGF0ZW1lbnQgVHlwZTogcmVsaWdpb24gdnMuIGZhY3QpIG1peGVkIEFOT1ZBIHdpdGggcmVwZWF0ZWQgbWVhc3VyZXMgb24gdGhlIHNlY29uZCBmYWN0b3IgYW5kIHRoZSBwcm9wb3J0aW9uIG9mIHRyaWFscyBvbiB3aGljaCBwYXJ0aWNpcGFudHMgY29tcGxldGVkIHNlbnRlbmNlcyB1c2luZyBhIGZvcm0gdGhlIHdvcmQg4oCcYmVsaWV2ZeKAnSAob3IgaXRzIHJlc3BlY3RpdmUgdHJhbnNsYXRpb24pIGFzIHRoZSBkZXBlbmRlbnQgbWVhc3VyZS4gVG8gbG9vayBmb3IgZmluZXItZ3JhaW5lZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRpZmZlcmVudCByZWxpZ2lvdXMgYW5kIGZhY3R1YWwgc3RhdGVtZW50cywgd2Ugd2lsbCBhbHNvIGNvbmR1Y3QgYSA1IChTaXRlOiBDaGluYSB2cy4gVGhhaWxhbmQgdnMuIFZhbnVhdHUgdnMuIEdoYW5hIHZzLiBVbml0ZWQgU3RhdGVzKSB4IDUgKFN0YXRlbWVudCBUeXBlOiBCdWRkaGlzdCByZWxpZ2lvdXMgc3RhdGVtZW50cyB2cy4gQ2hyaXN0aWFuIHJlbGlnaW91cyBzdGF0ZW1lbnRzIHZzLiBsaWZlIGZhY3RzIHZzLiB3ZWxsLWtub3duIGZhY3RzIHZzLiBlc290ZXJpYyBmYWN0cykgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgc2VudGVuY2VzIHVzaW5nIGEgZm9ybSBvZiB0aGUgd29yZCDigJxiZWxpZXZl4oCdIChvciBpdHMgcmVzcGVjdGl2ZSB0cmFuc2xhdGlvbikgYXMgdGhlIGRlcGVuZGVudCBtZWFzdXJlLiBJbiBhbGwgY2FzZXMgd2hlcmUgb21uaWJ1cyBBTk9WQXMgYXJlIHNpZ25pZmljYW50LCB3ZSB3aWxsIGNvbmR1Y3QgcGFpcndpc2UgYW5hbHlzZXMgY29tcGFyaW5nIGVhY2ggc3RhdGVtZW50IHR5cGUgd2l0aCBlYWNoIG90aGVyIHN0YXRlbWVudCB0eXBlIGFuZCBlYWNoIHNpdGUgd2l0aCBlYWNoIG90aGVyIHNpdGUuIgoKYGBge3IsIGVjaG8gPSBUfQpkMl9hbm92YSA8LSBkMl9sb25nICU+JQogIGRpc3RpbmN0KHRoYjJfc3ViaiwgY291bnRyeSwgc3VwZXJfY2F0LCBxdWVzdGlvbiwgYmVsaWV2ZVgpICU+JQogIGdyb3VwX2J5KHRoYjJfc3ViaiwgY291bnRyeSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UocHJvcF9iZWxpZXZlWCA9IG1lYW4oYmVsaWV2ZVgpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKHRoYjJfc3ViaiA9IGZhY3Rvcih0aGIyX3N1YmopKQoKY29udHJhc3RzKGQyX2Fub3ZhJGNvdW50cnkpIDwtIGNvbnRyYXN0X2NvdW50cnkKY29udHJhc3RzKGQyX2Fub3ZhJHN1cGVyX2NhdCkgPC0gY29udHJhc3Rfc3VwZXJfY2F0CmBgYAoKIyMgUHJlcmVnIEFuYWx5c2lzICMxCgpIZXJlIGlzIHRoZSBmaXJzdCBwcmVyZWdpc3RlcmVkIGFuYWx5aXM6IGEgNSAoY291bnRyeSkgeCAyIChxdWVzdGlvbiBjYXRlZ29yeSkgbWl4ZWQgQU5PVkEgd2l0aCByZXBlYXRlZCBtZWFzdXJlcyBvbiB0aGUgc2Vjb25kIGZhY3RvciBhbmQgdGhlIHByb3BvcnRpb24gb2YgdHJpYWxzIG9uIHdoaWNoIHBhcnRpY2lwYW50cyB3cm90ZSAiYmVybGlldmUiIGFzIHRoZSBEVi4KCmBgYHtyLCBlY2hvID0gVH0KcjIuNCA8LSBkMl9hbm92YSAlPiUKICBhbm92YV90ZXN0KGR2ID0gcHJvcF9iZWxpZXZlWCwgCiAgICAgICAgICAgICB3aWQgPSB0aGIyX3N1YmosIAogICAgICAgICAgICAgYmV0d2VlbiA9IGNvdW50cnksIAogICAgICAgICAgICAgd2l0aGluID0gc3VwZXJfY2F0KQoKZ2V0X2Fub3ZhX3RhYmxlKHIyLjQpCmBgYAoKVGhpcyBhbmFseXNpcyBhbGlnbnMgd2l0aCB0aGUgcmVncmVzc2lvbnMgYWJvdmUgYW5kIHdpdGggVGhpbmsgQmVsaWV2ZSAxLCBzdWdnZXN0aW5nIHRoYXQgcGFydGljaXBhbnRzJyB0ZW5kZW5jeSB0byB3cml0ZSAiYmVsaWV2ZSIgdmFyaWVkIGJ5IGNvdW50cnkvbGFuZ3VhZ2UgKGBjb3VudHJ5YCkgYW5kIGJ5IHF1ZXN0aW9uIGNhdGVnb3J5IChgc3VwZXJfY2F0YCksIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3J5IHZhcmllZCBhY3Jvc3MgY291bnRyaWVzL2xhbmd1YWdlcyAoaS5lLiwgdGhlcmUgd2FzIGFuIGludGVyYWN0aW9uOiBgY291bnRyeTpzdXBlcl9jYXRgKS4KClRoZSBwcmVyZWdpc3RyYXRpb24gaW5kaWNhdGVkIHRoYXQgd2UnZCBjb25kdWN0IHBhaXJ3aXNlIGZvbGxvdy11cCBhbmFseXNlcyBjb21wYXJpbmcgdGhlIHR3byBxdWVzdGlvbiBjYXRlZ29yaWVzIGFuZCBjb21wYXJpbmcgcGFpcnMgb2YgY291bnRpcmVzL2xhbmd1YWdlcyAtLSBidXQsIGFnYWluLCBJIGRvbid0IHJlYWxseSB0aGluayB3ZSdyZSBpbnRlcmVzdGVkIGluIGNvbXBhcmluZyBwYWlycyBvZiBjb3VudHJpZXMvbGFuZ3VhZ2VzLCBzbyBJJ20gZ29pbmcgdG8gc2tpcCB0aGF0IGZvciBub3cuIEluc3RlYWQsIEknbGwgY29tcGFyZSB0aGUgdHdvIHF1ZXN0aW9ucyBjYXRlZ29yaWVzIHdpdGhpbiBlYWNoIGNvdW50cnkvbGFuZ3VhZ2UgKHRvIGV4cGxvcmUgdGhlIHNpZ25pZmljYW50IGludGVyYWN0aW9uKSwgYXMgSSBkaWQgZm9yIFRoaW5rIEJlbGlldmUgMS4KCkhlcmUgd2UgZ286CgojIyMgQ29tcGFyaW5nIHF1ZXN0aW9uIGNhdGVnb3JpZXMKCmBgYHtyLCBlY2hvID0gVH0KcjIuNWEgPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsIGQyX2Fub3ZhKTsgcjIuNWEKYGBgCgpDb2xsYXBzaW5nIGFjcm9zcyBjb3VudHJpZXMvbGFuZ3VhZ2VzLCAqKnBhcnRpY2lwYW50cyB3cm90ZSBzaWduaWZpY2FudGx5IG1vcmUgImJlbGlldmUiIHJlc3BvbnNlcyBmb3IgcXVlc3Rpb25zIGluIHRoZSByZWxpZ2lvdXMgY2F0ZWdvcnkgKGByIDEwMCAqIChyMi41YSRlc3RpbWF0ZVsxXSAlPiUgcm91bmQoMikpYCUpIHRoYW4gdGhleSBkaWQgZm9yIHF1ZXN0aW9ucyBpbiB0aGUgZmFjdCBjYXRlZ29yeSAoYHIgMTAwICogKHIyLjVhJGVzdGltYXRlWzJdICU+JSByb3VuZCgyKSlgJSkqKi4KCiMjIyBDb21wYXJpbmcgcXVlc3Rpb24gY2F0ZWdvcmllcyB3aXRoaW4gY291bnRyaWVzL2xhbmd1YWdlcwoKYGBge3IsIGVjaG8gPSBUfQojIFVTCnIyLjViX3VzIDwtIHQudGVzdChwcm9wX2JlbGlldmVYIH4gc3VwZXJfY2F0LCBwYWlyZWQgPSBULAogICAgICAgICAgICAgICAgICAgZDJfYW5vdmEgJT4lIGZpbHRlcihjb3VudHJ5ID09ICJVUyIpKTsgcjIuNWJfdXMKCiMgR2hhbmEKcjIuNWJfZ2ggPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIkdoYW5hIikpOyByMi41Yl9naAoKCiMgVGhhaWxhbmQKcjIuNWJfdGggPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlRoYWlsYW5kIikpOyByMi41Yl90aAoKIyBDaGluYQpyMi41Yl9jaCA8LSB0LnRlc3QocHJvcF9iZWxpZXZlWCB+IHN1cGVyX2NhdCwgcGFpcmVkID0gVCwKICAgICAgICAgICAgICAgICAgIGQyX2Fub3ZhICU+JSBmaWx0ZXIoY291bnRyeSA9PSAiQ2hpbmEiKSk7IHIyLjViX2NoCgojIFZhbnVhdHUKcjIuNWJfdnQgPC0gdC50ZXN0KHByb3BfYmVsaWV2ZVggfiBzdXBlcl9jYXQsIHBhaXJlZCA9IFQsCiAgICAgICAgICAgICAgICAgICBkMl9hbm92YSAlPiUgZmlsdGVyKGNvdW50cnkgPT0gIlZhbnVhdHUiKSk7IHIyLjViX3Z0CmBgYAoKKipUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHF1ZXN0aW9uIGNhdGVnb3JpZXMgd2FzIHNpZ25pZmljYW50IGluIGVhY2ggY291bnRyeS9sYW5ndWFnZSBjb25zaWRlcmVkIGFsb25lLioqCgoKIyBGcmVlIHJlc3BvbnNlIGRhdGEKCkhlcmUncyBhIHZlcnkgcXVpY2sgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBtb3N0IGNvbW1vbiB3b3Jkcy9waHJhc2VzIGluIHRoZXNlIGZyZWUgcmVzcG9uc2VzIC0tIEkgZGlkIGEgcXVpY2sgYW5kIGRpcnR5ICJzdGVtbWluZyIgKGNvbnZlcnRpbmcsIGUuZy4sICJiZWxpZXZlIiBhbmQgImJlbGlldmVzIiBhbmQgImJlbGlldmVkIiBhbGwgdG8gdGhlIHN0ZW0gImJlbGlldiIpIGJ1dCB3ZSBjb3VsZCBsb29rIGludG8gZG9pbmcgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZC4gSGVyZSBhcmUgdGhlIHRvcCA1IHN0ZW1zIGZvciBlYWNoIHF1ZXN0aW9uIGNhdGVnb3J5LCBieSBjb3VudHJ5OiAKCmBgYHtyLCBpbmNsdWRlID0gRn0KZDJfbG9uZyAlPiUKICBjb3VudChjb3VudHJ5LCBzdXBlcl9jYXQsIGNhdGVnb3J5LCByZXNwb25zZV9sZW1tYTIpICU+JQogIGFycmFuZ2UoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSwgZGVzYyhuKSkKYGBgCgpgYGB7cn0KZDJfbG9uZyAlPiUKICBjb3VudChjb3VudHJ5LCBzdXBlcl9jYXQsIGNhdGVnb3J5LCByZXNwb25zZV9sZW1tYTIpICU+JQogIGFycmFuZ2UoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSwgZGVzYyhuKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgc3VwZXJfY2F0LCBjYXRlZ29yeSkgJT4lCiAgbXV0YXRlKHBlcmNlbnQgPSBwYXN0ZTAocm91bmQobi9zdW0obiksIDIpICogMTAwLCAiJSIpKSAlPiUKICB0b3Bfbig1LCBuKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KGNvdW50cnksIHN1cGVyX2NhdCwgY2F0ZWdvcnksIHJlc3BvbnNlX2xlbW1hMiwgcGVyY2VudCwgbikgJT4lCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjMpCmBgYAoKSSB0aGluayB0aGVyZSdzIGxvdHMgdG8gZGlzY3VzcyBoZXJlIC0tIGUuZy4sIHRoZSBjb21tb24gdXNlIG9mICJrbm93IiAod2hpY2ggSSB0aGluayBpcyBhbHJlYWR5IG9mIGludGVyZXN0KS4gQWxzbywgdGhlIEJpc2xhbWEgZGF0YSBhcHBlYXJzIHRvIGJlIGluIEJpc2xhbWEgKG5vdCB0cmFuc2xhdGVkKSAtLSBJJ3ZlIGluY2x1ZGVkICJiaWxpZiIgKGFuZCBzcGVsbGluZyB2YXJpYW50cykgYXMgImJlbGlldmUiIGFuZCAidGluZyIgKGFzIHNwZWxsaW5nIHZhcmlhbnRzKSBhcyAidGhpbmsiIGluIGFsbCBvZiB0aGUgZm9yZWdvaW5nIGFuYWx5c2VzLgoKYGBge3J9CnRvcF93b3JkcyA8LSBkMl9sb25nICU+JQogIGNvdW50KGNvdW50cnksIHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lCiAgdG9wX24oNiwgcHJvcCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgc3VtbWFyaXNlKG4gPSBzdW0obiksCiAgICAgICAgICAgIHByb3AgPSBzdW0ocHJvcCkvNSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoZGVzYyhwcm9wKSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pKQpgYGAKCmBgYHtyfQpmb3VyX2NvbHMgPC0gYygiZ3JheSIsICJraGFraSIsIGdnX2NvbG9yX2h1ZSgyKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KZDJfbG9uZyAlPiUKICBmaWx0ZXIocmVzcG9uc2VfbGVtbWEyICVpbiUgdG9wX3dvcmRzJHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgY291bnQoY291bnRyeSwgc3VwZXJfY2F0LCAjY2F0ZWdvcnksIAogICAgICAgIHJlc3BvbnNlX2xlbW1hMikgJT4lCiAgY29tcGxldGUocmVzcG9uc2VfbGVtbWEyLCBuZXN0aW5nKGNvdW50cnksIHN1cGVyX2NhdCksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgYXJyYW5nZShzdXBlcl9jYXQsICNjYXRlZ29yeSwgCiAgICAgICAgICBjb3VudHJ5LCBkZXNjKG4pKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCBzdXBlcl9jYXQpICU+JSAjLCBjYXRlZ29yeSkgJT4lCiAgbXV0YXRlKHByb3BvcnRpb24gPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUocmVzcG9uc2VfbGVtbWEyID0gcmVvcmRlcihyZXNwb25zZV9sZW1tYTIsIGRlc2MobikpLAogICAgICAgICByZXNwb25zZV9jb2xvciA9IGNhc2Vfd2hlbihyZXNwb25zZV9sZW1tYTIgPT0gInRoaW5rIiB+ICJ0aGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xlbW1hMiA9PSAiYmVsaWV2ZSIgfiAiYmVsaWV2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xlbW1hMiA9PSAia25vdyIgfiAia25vdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAib3RoZXIiKSwKICAgICAgICAgcmVzcG9uc2VfY29sb3IgPSBmYWN0b3IocmVzcG9uc2VfY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm90aGVyIiwgImtub3ciLCAidGhpbmsiLCAiYmVsaWV2ZSIpKSkgJT4lCiAgbGVmdF9qb2luKHRvcF93b3JkcyAlPiUgc2VsZWN0KHJlc3BvbnNlX2xlbW1hMiwgb3JkZXIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHJlc3BvbnNlX2xlbW1hMiwgb3JkZXIpLCAKICAgICAgICAgICAgIHkgPSBwcm9wb3J0aW9uLCBmaWxsID0gcmVzcG9uc2VfY29sb3IpKSArCiAgZmFjZXRfZ3JpZChzdXBlcl9jYXQgfiBjb3VudHJ5KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBmb3VyX2NvbHMpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAicmVzcG9uc2UiLCB5ID0gInByb3BvcnRpb24iLCBmaWxsID0gInJlc3BvbnNlIHR5cGUiKQpgYGAKCmBgYHtyfQp3cml0ZV9jc3YoZDJfbG9uZywgIi4uL2RhdGEvdGhpbmtiZWxpZXZlMl9mcmVlcmVzcG9uc2Vfa3cuY3N2IikKYGBgCgoKIyBBbmFseXNpczogUmVsaWdpb24gYW5kIHJlbGlnaW9zaXR5CgojIyBEZW1vZ3JhcGhpY3MKCkZpcnN0LCBsZXQncyBqdXN0IGxvb2sgYXQgaG93IHBlb3BsZSBpbiBkaWZmZXJlbnQgY291bnRyaWVzIHJlcGxpZWQgdG8gdGhlIHJlbGV2YW50IHF1ZXN0aW9ucy4gCgojIyMgYHRoYjJfZGVtb19yZWdwYDogIkFyZSB5b3UgYSBwYXJ0IG9mIGFueSByZWxpZ2lvdXMgZ3JvdXA/IgoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnlfbiwgCiAgICAgICAgICAgICAjIHB1dCBOQXMgb24gdG9wIG9mIGJhcgogICAgICAgICAgICAgZmlsbCA9IGZhY3Rvcih0aGIyX2RlbW9fcmVncCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhOQSwgIk5PIiwgIllFUyIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IE5VTEwpKSkgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJjb3VudHJ5IiwgeSA9ICJwcm9wb3J0aW9uIiwgCiAgICAgICBmaWxsID0gIkFyZSB5b3UgYSBwYXJ0IG9mIGFueSByZWxpZ2lvdXMgZ3JvdXA/IikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX3JlbHlgOiAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8gKDEgPSBub3QgcmVsaWdpb3VzIGF0IGFsbCwgNyA9CmV4dHJlbWVseSByZWxpZ2lvdXMpIgoKU2VlbXMgdG8gaGF2ZSBiZWVuIG9taXR0ZWQgaW4gVGhhaWxhbmQ/CgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYXMubnVtZXJpYyh0aGIyX2RlbW9fcmVseSkpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAxOjcsIG1pbm9yX2JyZWFrcyA9IE5VTEwpICsKICBsYWJzKHggPSAiRnJvbSAxIHRvIDcsIGhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKClNlZW1zIHRvIGhhdmUgYmVlbiBvbWl0dGVkIGluIFRoYWlsYW5kPwoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IGFzLm51bWVyaWModGhiMl9kZW1vX2ltcHIpKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMTo3LCBtaW5vcl9icmVha3MgPSBOVUxMKSArCiAgbGFicyh4ID0gIkZyb20gMSB0byA3LCBob3cgaW1wb3J0YW50IHRvIHlvdSBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3J9CmQyICU+JSAKICBsZWZ0X2pvaW4oc2FtcGxlX3NpemVfZDIpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzKSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5X24pICsKICBnZW9tX2JhcigpICsKICBsYWJzKHggPSAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IiwgCiAgICAgICB5ID0gImNvdW50IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkKYGBgCgojIyMgYHRoYjJfZGVtb19iZ29kYDogIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIKCmBgYHtyfQpkMiAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIyX2RlbW9fYmdvZCkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9iYXIoKSArCiAgbGFicyh4ID0gIldoYXQgYmVzdCBkZXNjcmliZXMgeW91ciBsZXZlbCBvZiBiZWxpZWYgaW4gR29kPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9fYmJ1aGA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iCgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2JidWgpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIEJ1ZGRoYT8iLCAKICAgICAgIHkgPSAiY291bnQiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2Jvc3BgOiAiV2hhdCBiZXN0IGRlc2NyaWJlcyB5b3VyIGxldmVsIG9mIGJlbGllZiBpbiBhbm90aGVyIHNwaXJpdHVhbCBiZWluZyAob3RoZXIgdGhhbiBHb2Qgb3IgQnVkZGhhKT8iCgpgYGB7cn0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2Jvc3ApKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgbGV2ZWwgb2YgYmVsaWVmIGluIGFub3RoZXIgc3Bpcml0dWFsIGJlaW5nIChvdGhlciB0aGFuIEdvZCBvciBCdWRkaGEpPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9fYXRzbmA6ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPwoKYGBge3IsIGZpZy53aWR0aCA9IDMuNSwgZmlnLmFzcCA9IDAuOH0KZDIgJT4lIAogIGxlZnRfam9pbihzYW1wbGVfc2l6ZV9kMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX2F0c24pKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnlfbikgKwogIGdlb21fYmFyKCkgKwogIGxhYnMoeCA9ICJXaGF0IGJlc3QgZGVzY3JpYmVzIHlvdXIgYXR0aXR1ZGUgdG93YXJkcyB0aGUgc3VwZXJuYXR1cmFsPyIsIAogICAgICAgeSA9ICJjb3VudCIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpCmBgYAoKIyMjIGB0aGIyX2RlbW9faW1zbmA6ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8gKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyfQpkMiAlPiUgCiAgbGVmdF9qb2luKHNhbXBsZV9zaXplX2QyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhcy5udW1lcmljKHRoYjJfZGVtb19pbXNuKSkpICsKICBmYWNldF9ncmlkKH4gY291bnRyeV9uKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDE6NywgbWlub3JfYnJlYWtzID0gTlVMTCkgKwogIGxhYnMoeCA9ICJGcm9tIDEgdG8gNywgaG93IGltcG9ydGFudCB0byB5b3UgaXMgeW91ciBhdHRpdHVkZSB0b3dhcmQgdGhlIHN1cGVybmF0dXJhbD8iLCAKICAgICAgIHkgPSAiY291bnQiKQpgYGAKCiMjIEFuYWx5c2VzCgpOb3csIGxldCdzIGxvb2sgYXQgaG93IHJlc3BvbnNlcyB0byBvdXIgdGhpbmsvYmVsaWV2ZSBxdWVzdGlvbnMgbWlnaHQgaGF2ZSB2YXJpZWQgZGVwZW5kaW5nIG9uIHJlbGlnaW9zaXR5L2V0Yy4gRm9yIG5vdywgSSdsbCBqdXN0IGZvY3VzIG9uIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0aGF0IHNlZW0gdG8gaGF2ZSBiZWVuIGFuc3dlcmVkIGluIHJlYXNvbmFibGUgd2F5cy4KCiMjIyBgdGhiMl9kZW1vX3JlbHlgOiDigJxGcm9tIDEgdG8gNywgaG93IHJlbGlnaW91cyBhcmUgeW91PyAoMSA9IG5vdCByZWxpZ2lvdXMgYXQgYWxsLCA3ID0gZXh0cmVtZWx5IHJlbGlnaW91cynigJ0KCmBgYHtyLCBlY2hvID0gVH0KcjIuNiA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiMl9kZW1vX3JlbHlfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjJfZGVtb19yZWx5X251bSA9IHNjYWxlKHRoYjJfZGVtb19yZWx5X251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIyLjYsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiMl9kZW1vX3JlbHlfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyByZWxpZ2lvdXMgYXJlIHlvdT8iKSAlPiUgCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMTAsIDE0OjE2KSkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgZ3JlYXRlciByZWxpZ2lvc2l0eSB3YXMgTk9UIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmNyZWFzZWQgZGlzdGluY3Rpb24gYmV0d2VlbiByZWxpZ2lvdXMgYW5kIGZhY3QgcXVlc3Rpb25zLiAoTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgb21pdHMgcGFydGljaXBhbnRzIGZyb20gVGhhaWxhbmQsIHdobyBkaWQgbm90IGFuc3dlciB0aGlzIHF1ZXN0aW9uIGFib3V0IHJlbGlnaW9zaXR5LikKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGhiMl9kZW1vX3JlbHlfbnVtLCB5ID0gYmVsaWV2ZV9wcm9wLCBjb2xvciA9IHN1cGVyX2NhdCkpICsKICBmYWNldF9ncmlkKC4gfiBjb3VudHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4xLCBoZWlnaHQgPSAwLjAyKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSAwOjYsIGxhYmVscyA9IGxldmVscyhkMiR0aGIyX2RlbW9fcmVseSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoeCA9ICJIb3cgcmVsaWdpb3VzIGFyZSB5b3U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19yZWx5X251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb19yZWx5X251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3JlbHkpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IHJlbGlnaW91cyBhcmUgeW91PyIsIAogICAgICAgeSA9ICJEaWZmZXJlbmNlIGluIHByb3BvcnRpb24gJ2JlbGlldmUnIHJlc3BvbnNlc1xuKHJlbGlnaW91cyBxdWVzdGlvbnMgLSBmYWN0IHF1ZXN0aW9ucykiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCiMjIyBgdGhiMl9kZW1vX2ltcHJgOiAiRnJvbSAxIHRvIDcsIGhvdyBpbXBvcnRhbnQgdG8geW91IGlzIHlvdXIgcmVsaWdpb3VzIHByYWN0aWNlPyAgKDEgPSBub3QgaW1wb3J0YW50IGF0IGFsbCwgNyA9IG9mIHV0bW9zdCBpbXBvcnRhbmNlKSIKCmBgYHtyLCBlY2hvID0gVH0KcjIuNyA8LSBsbWVyKGJlbGlldmUgfiBzdXBlcl9jYXQgKiBjb3VudHJ5ICogdGhiMl9kZW1vX2ltcHJfbnVtCiAgICAgICAgICAgICArICgxICsgc3VwZXJfY2F0IHwgdGhiMl9zdWJqKSArICgxIHwgcXVlc3Rpb24pLAogICAgICAgICAgICAgZGF0YSA9IGQyX2xvbmcgJT4lIAogICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHRoYjJfZGVtb19pbXByX251bSA9IHNjYWxlKHRoYjJfZGVtb19pbXByX251bSkpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChjb3VudHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCmBgYHtyfQpyZWd0YWJfZnVuKHIyLjcsIHN0ZF9iZXRhID0gVCwgCiAgICAgICAgICAgY291bnRyeV92YXIxID0gImNvdW50cnkxIiwgY291bnRyeV9uYW1lMSA9ICJDb3VudHJ5IChVUykiLAogICAgICAgICAgIGNvdW50cnlfdmFyMiA9ICJjb3VudHJ5MiIsIGNvdW50cnlfbmFtZTIgPSAiQ291bnRyeSAoR2hhbmEpIiwKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAiY291bnRyeTMiLCBjb3VudHJ5X25hbWUzID0gIkNvdW50cnkgKENoaW5hKSIsCiAgICAgICAgICAgcHJlZGljdG9yX3ZhcjEgPSAidGhiMl9kZW1vX2ltcHJfbnVtIiwgCiAgICAgICAgICAgcHJlZGljdG9yX25hbWUxID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSBjKDEwLCAxNDoxNikpCmBgYAoKVGhpcyBhbmFseXNpcyBzdWdnZXN0cyB0aGF0IG1vcmUgaW1wb3J0YW5jZSBwbGFjZWQgb24gcmVsaWdpb3VzIHByYWN0aWNlIHdhcyBOT1QgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlZCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlbGlnaW91cyBhbmQgZmFjdCBxdWVzdGlvbnMuIChOb3RlIHRoYXQgdGhpcyBhbmFseXNpcyBvbWl0cyBwYXJ0aWNpcGFudHMgZnJvbSBUaGFpbGFuZCwgd2hvIGRpZCBub3QgYW5zd2VyIHRoaXMgcXVlc3Rpb24gYWJvdXQgcmVsaWdpb3NpdHkuKQoKYGBge3J9CmQyX2xvbmcgJT4lIAogIGZpbHRlcihjb3VudHJ5ICE9ICJUaGFpbGFuZCIpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIHRoYjJfc3ViaiwgdGhiMl9kZW1vX2ltcHJfbnVtLCBzdXBlcl9jYXQpICU+JQogIHN1bW1hcmlzZShiZWxpZXZlX3Byb3AgPSBtZWFuKGJlbGlldmUsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aGIyX2RlbW9faW1wcl9udW0sIHkgPSBiZWxpZXZlX3Byb3AsIGNvbG9yID0gc3VwZXJfY2F0KSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvdW50cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjEsIGhlaWdodCA9IDAuMDIpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDA6NiwgbGFiZWxzID0gbGV2ZWxzKGQyJHRoYjJfZGVtb19pbXByKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh4ID0gIkhvdyBpbXBvcnRhbnQgaXMgeW91ciByZWxpZ2lvdXMgcHJhY3RpY2U/IiwgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBmaWx0ZXIoY291bnRyeSAhPSAiVGhhaWxhbmQiKSAlPiUKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb19pbXByX251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb19pbXByX251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo2LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX2ltcHIpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHggPSAiSG93IGltcG9ydGFudCBpcyB5b3VyIHJlbGlnaW91cyBwcmFjdGljZT8iLCAKICAgICAgIHkgPSAiRGlmZmVyZW5jZSBpbiBwcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXNcbihyZWxpZ2lvdXMgcXVlc3Rpb25zIC0gZmFjdCBxdWVzdGlvbnMpIiwKICAgICAgIGNvbG9yID0gIkNhdGVnb3J5IikKYGBgCgojIyMgYHRoYjJfZGVtb3dvcnNgOiAiSG93IG9mdGVuIGRvIHlvdSBhdHRlbmQgcGxhY2VzIG9mIHdvcnNoaXA/IgoKYGBge3IsIGVjaG8gPSBUfQpyMi44IDwtIGxtZXIoYmVsaWV2ZSB+IHN1cGVyX2NhdCAqIGNvdW50cnkgKiB0aGIyX2RlbW9fd29yc19udW0KICAgICAgICAgICAgICsgKDEgKyBzdXBlcl9jYXQgfCB0aGIyX3N1YmopICsgKDEgfCBxdWVzdGlvbiksCiAgICAgICAgICAgICBkYXRhID0gZDJfbG9uZyAlPiUgCiAgICAgICAgICAgICAgIG11dGF0ZSh0aGIyX2RlbW9fd29yc19udW0gPSBzY2FsZSh0aGIyX2RlbW9fd29yc19udW0pKSkKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMi44LCBzdGRfYmV0YSA9IFQsIAogICAgICAgICAgIHByZWRpY3Rvcl92YXIxID0gInRoYjJfZGVtb193b3JzX251bSIsIAogICAgICAgICAgIHByZWRpY3Rvcl9uYW1lMSA9ICJIb3cgb2Z0ZW4gZG8geW91IGF0dGVuZCBwbGFjZXMgb2Ygd29yc2hpcD8iKSAlPiUgCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IGMoMTIsIDE3OjIwKSkKYGBgCgpUaGlzIGFuYWx5c2lzIHN1Z2dlc3RzIHRoYXQgZnJlcXVlbmN5IG9mIGF0dGVuZGVuY2Ugd2FzIE5PVCBhc3NvY2lhdGVkIHdpdGggYW4gaW5jcmVhc2VkIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVsaWdpb3VzIGFuZCBmYWN0IHF1ZXN0aW9ucy4gCgpgYGB7cn0KZDJfbG9uZyAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeSwgdGhiMl9zdWJqLCB0aGIyX2RlbW9fd29yc19udW0sIHN1cGVyX2NhdCkgJT4lCiAgc3VtbWFyaXNlKGJlbGlldmVfcHJvcCA9IG1lYW4oYmVsaWV2ZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzX251bSwgeSA9IGJlbGlldmVfcHJvcCwgY29sb3IgPSBzdXBlcl9jYXQpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo0LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3dvcnMpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gIkhvdyBvZnRlbiBkbyB5b3UgYXR0ZW5kIHBsYWNlcyBvZiB3b3JzaGlwPyIsIAogICAgICAgeSA9ICJQcm9wb3J0aW9uICdiZWxpZXZlJyByZXNwb25zZXMiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCmBgYHtyfQpkMl9sb25nICU+JSAKICBncm91cF9ieShjb3VudHJ5LCB0aGIyX3N1YmosIHRoYjJfZGVtb193b3JzX251bSwgc3VwZXJfY2F0KSAlPiUKICBzdW1tYXJpc2UoYmVsaWV2ZV9wcm9wID0gbWVhbihiZWxpZXZlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1cGVyX2NhdCwgYmVsaWV2ZV9wcm9wKSAlPiUKICBtdXRhdGUoZGlmZiA9IHJlbGlnaW91cyAtIGZhY3QpICU+JQogIGdncGxvdChhZXMoeCA9IHRoYjJfZGVtb193b3JzX251bSwgeSA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZCguIH4gY291bnRyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMSwgaGVpZ2h0ID0gMC4wMikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMDo0LCBsYWJlbHMgPSBsZXZlbHMoZDIkdGhiMl9kZW1vX3dvcnMpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gIkhvdyBvZnRlbiBkbyB5b3UgYXR0ZW5kIHBsYWNlcyBvZiB3b3JzaGlwPyIsIAogICAgICAgeSA9ICJEaWZmZXJlbmNlIGluIHByb3BvcnRpb24gJ2JlbGlldmUnIHJlc3BvbnNlc1xuKHJlbGlnaW91cyBxdWVzdGlvbnMgLSBmYWN0IHF1ZXN0aW9ucykiLAogICAgICAgY29sb3IgPSAiQ2F0ZWdvcnkiKQpgYGAKCgoKCgo=